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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
php自动获取关键字的方法
Jan 06 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
Yii框架函数简单用法分析
Sep 09 PHP
PHP7修改的函数
Mar 09 PHP
php7中停止php-fpm服务的方法详解
May 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在各种web服务器的运行模式详解
2013/06/03 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
jquery 表格的增行删行实现思路
2013/03/21 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
python实现堆排序的实例讲解
2020/02/21 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
python实现简单的tcp 文件下载
2020/09/16 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
C#公司笔试题
2014/03/28 面试题
八一演出活动方案
2014/02/03 职场文书
授权委托书样本
2014/04/03 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书