PHP中的生成XML文件的4种方法分享


Posted in PHP onOctober 06, 2012

生成如下XML串
Xml代码

<?xml version="1.0" encoding="utf-8"?>
<article>
    <item>
        <title size="1">title1</title>
        <content>content1</content>
        <pubdate>2009-10-11</pubdate>
    </item>
    <item>
        <title size="1">title2</title>
        <content>content2</content>
        <pubdate>2009-11-11</pubdate>
    </item>
</article>

方法I.【直接生成字符串】
使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效!
<?PHP
$data_array = array(
    array(
    'title' => 'title1',
    'content' => 'content1',
        'pubdate' => '2009-10-11',
    ),
    array(
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11',
    )
);
$title_size = 1;
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$xml .= "<article>\n";
foreach ($data_array as $data) {
$xml .= create_item($data['title'], $title_size, $data['content'], $data['pubdate']);
}
$xml .= "</article>\n";
echo $xml;
//  创建XML单项
function create_item($title_data, $title_size, $content_data, $pubdate_data)
{
    $item = "<item>\n";
    $item .= "<title size=\"" . $title_size . "\">" . $title_data . "</title>\n";
    $item .= "<content>" . $content_data . "</content>\n";
    $item .= " <pubdate>" . $pubdate_data . "</pubdate>\n";
    $item .= "</item>\n";
    return $item;
}
?>

方法2:【DomDocument】
使用DomDocument生成XML文件,创建节点使用createElement方法,创建文本内容使用createTextNode方法,添加子节点使用appendChild方法,创建属性使用createAttribute方法
<?php
$data_array = array(
    array(
    'title' => 'title1',
    'content' => 'content1',
        'pubdate' => '2009-10-11',
    ),
    array(
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11',
    )
);
//  属性数组
$attribute_array = array(
    'title' => array(
    'size' => 1
    )
);
//  创建一个XML文档并设置XML版本和编码。。
$dom=new DomDocument('1.0', 'utf-8');
//  创建根节点
$article = $dom->createElement('article');
$dom->appendchild($article);
foreach ($data_array as $data) {
    $item = $dom->createElement('item');
    $article->appendchild($item);
    create_item($dom, $item, $data, $attribute_array);
}
echo $dom->saveXML();
function create_item($dom, $item, $data, $attribute) {
    if (is_array($data)) {
        foreach ($data as $key => $val) {
            //  创建元素
            $$key = $dom->createElement($key);
            $item->appendchild($$key);
            //  创建元素值
            $text = $dom->createTextNode($val);
            $$key->appendchild($text);
            if (isset($attribute[$key])) {
            //  如果此字段存在相关属性需要设置
                foreach ($attribute[$key] as $akey => $row) {
                    //  创建属性节点
                    $$akey = $dom->createAttribute($akey);
                    $$key->appendchild($$akey);
                    // 创建属性值节点
                    $aval = $dom->createTextNode($row);
                    $$akey->appendChild($aval);
                }
            }   //  end if
        }
    }   //  end if
}   //  end function
?>

方法3:【XMLWriter】
使用XMLWriter类创建XML文件,此方法在PHP 5.1.2后有效。另外,它可以输出多种编码的XML,但是输入只能是utf-8
<?php
$data_array = array(
    array(
    'title' => 'title1',
    'content' => 'content1',
        'pubdate' => '2009-10-11',
    ),
    array(
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11',
    )
);
//  属性数组
$attribute_array = array(
    'title' => array(
    'size' => 1
    )
);
$xml = new XMLWriter();
$xml->openUri("php://output");
//  输出方式,也可以设置为某个xml文件地址,直接输出成文件
$xml->setIndentString('  ');
$xml->setIndent(true);
$xml->startDocument('1.0', 'utf-8');
//  开始创建文件
//  根结点
$xml->startElement('article');
foreach ($data_array as $data) {
    $xml->startElement('item');
    if (is_array($data)) {
        foreach ($data as $key => $row) {
          $xml->startElement($key);
          if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
          {
              foreach ($attribute_array[$key] as $akey => $aval) {
              //  设置属性值
                    $xml->writeAttribute($akey, $aval);
                }
            }
            $xml->text($row);   //  设置内容
            $xml->endElement(); // $key
        }
    }
    $xml->endElement(); //  item
}
$xml->endElement(); //  article
$xml->endDocument();
$xml->flush();
?>

方法4: 【SimpleXML】
使用SimpleXML创建XML文档
<?php
$data_array = array(
    array(
    'title' => 'title1',
    'content' => 'content1',
        'pubdate' => '2009-10-11',
    ),
    array(
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11',
    )
);
//  属性数组
$attribute_array = array(
    'title' => array(
    'size' => 1
    )
);
$string = <<<XML
<?xml version='1.0' encoding='utf-8'?>
<article>
</article>
XML;
$xml = simplexml_load_string($string);
foreach ($data_array as $data) {
    $item = $xml->addChild('item');
    if (is_array($data)) {
        foreach ($data as $key => $row) {
          $node = $item->addChild($key, $row);
          if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
            {
              foreach ($attribute_array[$key] as $akey => $aval) {
             //  设置属性值
                  $node->addAttribute($akey, $aval);
            }
          }
        }
    }
}
echo $xml->asXML();
?>
PHP 相关文章推荐
PHP实现图片简单上传
Oct 09 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
php对称加密算法示例
May 07 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 #PHP
PHP正则表达式之定界符和原子介绍
Oct 05 #PHP
PHP超级全局变量数组小结
Oct 04 #PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 #PHP
php 保留字列表
Oct 04 #PHP
php使HTML标签自动补全闭合函数代码
Oct 04 #PHP
php中explode与split的区别介绍
Oct 03 #PHP
You might like
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python中super()函数简介及用法分享
2016/07/11 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
车工岗位职责
2013/11/26 职场文书
优秀大学生推荐信范文
2013/11/28 职场文书
个人求职简历中英文自我评价
2013/12/16 职场文书
英文导游欢迎词
2014/01/11 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
大学生自我鉴定书
2014/03/24 职场文书
中学生操行评语
2014/04/24 职场文书
六年级学生期末评语
2014/12/26 职场文书
北京故宫的导游词
2015/01/31 职场文书
开会通知短信大全
2015/04/20 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python