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的FTP学习(一)[转自奥索]
Oct 09 PHP
轻松修复Discuz!数据库
May 03 PHP
PHP cron中的批处理
Sep 16 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
Dom 结点创建 基础知识
2011/10/01 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python过滤序列元素的方法
2020/07/31 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
思想汇报格式
2014/01/05 职场文书
技能比赛获奖感言
2014/02/14 职场文书
2014年冬季防火方案
2014/05/21 职场文书
逃课检讨书
2015/01/26 职场文书
优秀英文求职信范文
2015/03/19 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
《月光曲》教学反思
2016/02/16 职场文书
《小小的船》教学反思
2016/02/18 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle