php实现的数组转xml案例分析
本文实例讲述了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
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具: http://tools.zalou.cn/code/xmljson
在线格式化XML/在线压缩XML: http://tools.zalou.cn/code/xmlformat
XML在线压缩/格式化工具: http://tools.zalou.cn/code/xml_format_compress
XML代码在线格式化美化工具: http://tools.zalou.cn/code/xmlcodeformat
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP针对XML文件操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC