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 文章中的远程图片采集到本地的代码
Jul 30 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
symfony表单与页面实现技巧
Jan 26 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
php两种无限分类方法实例
Apr 21 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP chr()函数讲解
Feb 11 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Django框架中方法的访问和查找
2015/07/15 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
最新pycharm安装教程
2020/11/18 Python
假日旅行社实习自我鉴定
2013/09/24 职场文书
给护士表扬信
2014/01/19 职场文书
自我评价的范文
2014/02/02 职场文书
客户接待方案
2014/02/26 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Windows7下FTP搭建图文教程
2022/08/05 Servers