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 和 MySQL 开发的 8 个技巧
Oct 09 PHP
Php Image Resize图片大小调整的函数代码
Jan 17 PHP
PHP json_decode函数详细解析
Feb 17 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
php自动加载方式集合
Apr 04 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
Python运算符重载详解及实例代码
2017/03/07 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
通俗讲解python 装饰器
2020/09/07 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
项目资料员岗位职责
2013/12/10 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
超市食品安全承诺书
2015/04/29 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android