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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP数组相关函数汇总
Mar 24 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
php设计模式之单例模式代码
Jun 11 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
Laravel框架实现抢红包功能示例
Oct 31 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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无限极分类实现的两种解决方法
2013/04/28 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Python中isnumeric()方法的使用简介
2015/05/19 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
python deque模块简单使用代码实例
2020/03/12 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
巴西在线鞋店:Shoestock
2017/10/28 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
PHP面试题及答案二
2015/05/23 面试题
质检员的岗位职责
2013/11/15 职场文书
教师档案管理制度
2014/01/23 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
化工见习报告范文
2014/10/31 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
八年级历史教学反思
2016/02/19 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书