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读取ACCESS数据到MYSQL的代码
May 11 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
php反射应用示例
Feb 25 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 PHP
使用PHP开发留言板功能
Nov 19 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
php 多文件上传的实现实例
2016/10/23 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
js获取域名的方法
2015/01/27 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
利用Python开发微信支付的注意事项
2016/08/19 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Django权限机制实现代码详解
2018/02/05 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
Linux面试题LINUX系统类
2014/11/19 面试题
高三自我鉴定
2013/10/23 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
财务负责人任命书
2014/06/06 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
2015年环卫工作总结
2015/04/28 职场文书
门面租赁合同范文
2019/08/06 职场文书