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基础知识:类与对象(5) static
Dec 13 PHP
php empty函数 使用说明
Aug 10 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
php从字符串创建函数的方法
Mar 16 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php实现微信模板消息推送
Mar 30 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 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文件锁定写入实例解析
2014/07/14 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
一个javascript参数的小问题
2008/03/02 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
python关闭windows进程的方法
2015/04/18 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
python3代码中实现加法重载的实例
2020/12/03 Python
为什么需要版本控制?
2013/08/08 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
白血病捐款倡议书
2014/05/14 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
二年级作文之动物作文
2019/11/13 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang