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 相关文章推荐
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
php车辆违章查询数据示例
Oct 14 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 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获取MAC地址的具体实例
2013/12/13 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
Prototype Object对象 学习
2009/07/12 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
四年级科学教学反思
2014/02/10 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
深入理解python协程
2021/06/15 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript