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实现paypal整合方法
Nov 28 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
详解js异步文件加载器
Jan 24 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
PHP图片加水印实现方法
May 06 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 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
收音机术语解释
2021/03/01 无线电
php设计模式  Command(命令模式)
2011/06/17 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php递归函数怎么用才有效
2018/02/24 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
js中对象和面向对象与Json介绍
2019/01/21 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python脚本实现验证码识别
2018/06/07 Python
简单了解Django ContentType内置组件
2019/07/23 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
供用电专业求职信
2014/07/07 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
暑期学习心得体会
2014/09/02 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
考勤制度通知
2015/04/25 职场文书