php实现的数组转xml案例分析


Posted in PHP onSeptember 28, 2019

本文实例讲述了php实现的数组转xml。分享给大家供大家参考,具体如下:

0x00 需求

最近要做百度、360、神马搜索的网站sitemap,三家的格式都是xml,然而具体的细节还有有差别的。

一开始用的是dom,没有使用sax,写了几段便觉得太傻了,想到有没有数组转xml的库呢?

0x01 array2xml

搜索了一下,还真有地址为git,于是开始撸起袖子开始干。

示例如下:

THE CODE:

$xml = new ArrayToXML();
print $xml->buildXML($input);

INPUT:

$input = array('product' => array(
'@id' => 7,
'name' => 'some string',
'seo' => 'some-string',
'ean' => '',
'producer' => array(
'name' => null,
'photo' => '1.png'
),
'stock' => 123,
'trackstock' => 0,
'new' => 0,
'pricewithoutvat' => 1111,
'price' => 1366.53,
'discountpricenetto' => null,
'discountprice' => null,
'vatvalue' => 23,
'currencysymbol' => 'PLN',
'#description' => '',
'#longdescription' => '',
'#shortdescription' => '',
'category' => array(
'photo' => '1.png',
'name' => 'test3',
),
'staticattributes' => array(
'attributegroup' => array(
1 => array(
'@name' => 'attributes group',
'attribute' => array(
0 => array(
'name' => 'second',
'description' => 'desc2',
'file' => '',
),
1 =>
array(
'name' => 'third',
'description' => 'desc3',
'file' => '',
),
)
)
)
),
'attributes' => array(),
'photos' => array(
'photo' => array(
0 => array(
'@mainphoto' => '1',
'%' => '1.png',
),
1 => array(
'@mainphoto' => '0',
'%' => '2.png',
),
2 => array(
'@mainphoto' => '0',
'%' => '3.png',
)
)
)
));

OUTPUT (XML data):

<?xml version="1.0" encoding="UTF-8"?>
<data>
<product id="8">
<description><[CDATA[]]></description>
<longdescription><[CDATA[]]></longdescription>
<shortdescription><[CDATA[]]></shortdescription>
<name>some string</name>
<seo>some-string</seo>
<ean></ean>
<producer>
<name></name>
<photo>1.png</photo>
</producer>
<stock>123</stock>
<trackstock>0</trackstock>
<new>0</new>
<pricewithoutvat>1111</pricewithoutvat>
<price>1366.53</price>
<discountpricenetto></discountpricenetto>
<discountprice></discountprice>
<vatvalue>23</vatvalue>
<currencysymbol>PLN</currencysymbol>
<category>
<photo>1.png</photo>
<name>test3</name>
</category>
<staticattributes>
<attributegroup name="attributes group">
<attribute>
<name>second</name>
<description><p>desc2</p></description>
<file></file>
</attribute>
<attribute>
<name>third</name>
<description><p>desc3</p></description>
<file></file>
</attribute>
</attributegroup>
</staticattributes>
<photos>
<photo mainphoto="1">1.png</photo>
<photo mainphoto="0">2.png</photo>
<photo mainphoto="0">3.png</photo>
</photos>
</product>
</data>

可以看到,# 表示CDATA,@表示属性,%代表有属性时这个元素本身的值,非常简洁。
另外数组要把重复元素提到外面作为数组的key,重复元素的各种属性是数组的值,并不需要像上面那样指定 0、1、2索引,直接用就可以了。

0x02 改进

可是发现有一个bug,根节点不能以CDATA开始。

另外还缺少一个功能,CDATA和属性不能同时存在。

于是阅读源码,改进了这两项,提交给了作者,并被合并了。

我额外增加了一个符号 “!” ,当CDATA 和属性同时存在时,写法为:

$input = [
"key" =>[
"@id" => 1,
"!" => 2
]
]

<key id="1"><![CDATA[2]]></key>

PHP 相关文章推荐
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
php实现的验证码文件类实例
Jun 18 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP反射原理与用法深入分析
Sep 28 #PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 #PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 #PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 #PHP
PHP的cookie与session原理及用法详解
Sep 27 #PHP
PHP下载文件函数与用法示例
Sep 27 #PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 #PHP
You might like
给初学PHP的5个入手程序
2006/11/23 PHP
php 定界符格式引起的错误
2011/05/24 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
laravel 数据验证规则详解
2019/10/23 PHP
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
node后端服务保活的实现
2019/11/10 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
如何表示python中的相对路径
2020/07/08 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
管理站站长岗位职责
2013/11/27 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
维稳工作承诺书
2015/01/20 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书