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 session常见问题集锦及解决办法总结
Mar 18 PHP
开源SNS系统-ThinkSNS
May 18 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
php生成略缩图代码
Jul 16 PHP
php一个找二层目录的小东东
Aug 02 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 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/05/09 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
一个符号插入器 中用到的js代码
2007/09/04 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
python实现上传下载文件功能
2020/11/19 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
django celery redis使用具体实践
2019/04/08 Python
Django继承自带user表并重写的例子
2019/11/18 Python
python实现TCP文件传输
2020/03/20 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
python中线程和进程有何区别
2020/06/17 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
生物化工专业个人自荐信
2013/09/26 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
产品销售计划书
2014/05/04 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
民政局未婚证明
2015/06/15 职场文书