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 相关文章推荐
生成缩略图
Oct 09 PHP
php打造属于自己的MVC框架
Mar 07 PHP
PHP中echo和print的区别
Aug 28 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
php实现复制移动文件的方法
Jul 29 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
PHP7 参数处理机制修改
Mar 09 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
ajax实现无刷新分页(php)
2010/07/18 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
PHP多进程简单实例小结
2019/11/09 PHP
javascript radio 联动效果
2009/03/04 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
Python 自动补全(vim)
2014/11/30 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python getpass实现密文实例详解
2019/09/24 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
C#软件工程师英语面试题
2015/06/07 面试题
外贸实习生自荐信范文
2013/11/24 职场文书
婚前协议书范本
2014/04/15 职场文书
银行求职自荐书
2014/06/25 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
行政答辩状范文
2015/05/21 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript