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 相关文章推荐
PHP+DBM的同学录程序(5)
Oct 09 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
kali中python版本的切换方法
2019/07/11 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Python中pass的作用与使用教程
2020/11/13 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
汽车检测与维修个人求职信
2013/09/24 职场文书
普通大学毕业生自荐信
2013/11/04 职场文书
打架检讨书500字
2014/01/29 职场文书
工程招投标邀请书
2014/01/30 职场文书
学习十八大报告感言
2014/02/28 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
网络销售员岗位职责
2015/04/11 职场文书
2015年售票员工作总结
2015/04/29 职场文书