PHP自定义XML类实现数组到XML文件的转换
这两天在公司写和各应用商店应用内搜索的接口,大致就像百度应用内搜索这样的东西,具体可以点下面的链接查看。
有的应用商店需要JSON格式的数据,所以我只需要用下面的语句就可以返回对方服务器需要的数据。
echo json_encode($array);
然而遇到像百度这种需要XML格式的就比较蛋疼了,php的确在标准库里提供了生成XML文件的方法。可能是因为这部分的中文文档还没有,并不能百度到详尽的介绍(笑),因此花点时间自己写一个XML类封装几个可能用得到的方法。
我使用的是php标准库里的simpleXMLElement拓展,原因是这个拓展相比于DOMDocument更加轻量,使用方便,适合于我这样的懒鬼(划掉)。
将数组转换为xml格式的文件需要用到递归,但是并不复杂,具体看代码。
<?php
/**
* 自定义XML类
* XML::arrayToXMLString : 将数组转换为XML格式的字符串
* XML::writeAsXML : 使用SimpleXMLElement输出XML文件
*
* @author zhouxuchen1993@foxmail.com
*/
class XML {
/**
* 将数组转换为XML格式的字符串
* @param Array $array : 待转换的数组
* @return String $xmlString : XML格式的字符串
*/
public static function arrayToXMLString ($array) {
$xmlString = "";
foreach ($array as $key => $value) {
if (is_array($value)) {
$xmlString .= "<$key>\n";
$xmlString .= self::arrayToXMLString($value);
$xmlString .= "</$key>\n";
} else {
$xmlString .= "<$key>";
$xmlString .= "$value";
$xmlString .= "</$key>\n";
}
}
return $xmlString;
}
/**
* 使用SimpleXMLElement输出XML文件
* @param String $xmlString : XML格式的字符串
* @param String $filename : 输出的文件名,留空则不写入文件
* @param String $filepath : 输出的文件路径,留空则写入当前目录
* @return boolean $flag : simpleXMLElement转换是否成功标志
*/
public static function writeAsXML($xmlString, $filename='', $filepath='') {
$simpleXML = new simpleXMLElement($xmlString);
if ($filename != '') {
$filename = empty($filepath) ? $filename : $filepath.'/'.$filename;
$flag = $simpleXML->asXML($filename);
} else {
$flag = $simpleXML->asXML();
}
return $flag;
}
}
另外我写了一个Demo,直接粘贴在上面代码的后部就可以运行了。
<?php
/**
* Demo
* @author zhouxuchen1993@foxmail.com
*/
$array = array();
$array['urlset'] = array(
'url' => array(
'loc' => 'http://baidu.com',
'lastmod' => '2014-09-06',
'data' => array(
'display' => array(
'innerID' => 1,
'sourceTime' => time(),
'title' => '<![CDATA[上海招聘]]>',
'displayInfo1' => array(
'key1' => 'key1',
'value1' => 'value1'
),
'displayInfo2' => array(
'key1' => 'key1',
'value1' => 'value1'
),
),
),
),
);
$xmlString = XML::arrayToXMLString($array);
$xmlString = '<?xml version="1.0" encoding="utf-8"?>'.$xmlString;
$flag = XML::writeAsXML($xmlString, 'test.xml');
var_dump($flag);
我将代码放在了我的GitOSC主页上,有兴趣的可以去查看。
PHP自定义XML类实现数组到XML文件的转换的更多相关文章
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- [引]LINQ to XML 类概述
本文转自:http://msdn.microsoft.com/zh-cn/library/bb387023.aspx 本主题提供 System.Xml.Linq 命名空间中 LINQ to XML 类 ...
- 自定义View编译失败。Binary XML file line #255: Error inflating
02-28 15:17:16.281: DEBUG/AndroidRuntime(391): Shutting down VM 02-28 15:17:16.281: WARN/dalvikvm(39 ...
- JAXB—Java类与XML文件之间转换
JAXB-Java类与XML文件之间转换 简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...
- LINQ系列:LINQ to XML类
LINQ to XML由System.Xml.Linq namespace实现,该namespace包含处理XML时用到的所有类.在使用LINQ to XML时需要添加System.Xml.Linq. ...
- .NET操作Xml类
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.I ...
- Flex与Java交互(Flex调用java类展示数据)解析xml展示数据
Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...
- XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)
以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- as3 XML类和XMLList类的区别
一.XML类和XMLList类的区别 AS3.0中,处理XML主要用到两个主类,XML类和XMLList类,这两个类的很多内容是共通的.应该有人会问,XML和XMLList的区别是什么? ...
随机推荐
- 使用MySQLMTOP监控MySQL性能(一)
一.环境说明 1.服务器角色 服务器角色 172.18.35.29 10.160.22.14 (MySQL Master) 10.160.22.47 (MySQL Slave) 监控点 YES NO ...
- couldn't connect to host
“couldn't connect to host” 这样的错误可能是主机不可到达,或者端口不可到达. ping OK只代表主机可以到达. 端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端 ...
- 浙江工业大学校赛 XiaoWei的战斗力
XiaoWei的战斗力 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 使用docx4j编程式地创建复杂的Word(.docx)文档
原文链接:Create complex Word (.docx) documents programatically with docx4j 原文作者:jos.dirksen 发表日期:2012年2月 ...
- 为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法
场景: 有1.2亿条问答数据,相同问题的不同答案为不同条的数据,且该表数据逐日递增: 第三方需求(不合理): 将问题.答案数据分别放入问题表.答案表: 问题表的主键为整数,在答案表中,每行数据有相应的 ...
- Python开发【Django】:Form组件
Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...
- mysql 数据操作 单表查询 group by 注意
GROUP BY 单独使用GROUP BY关键字分组 SELECT post FROM employee GROUP BY post; 注意:我们按照post字段分组,那么select查询的字段只能是 ...
- Struts,Spring,Hibernate优缺点
Struts跟Tomcat.Turbine等诸 多Apache项目一样,是开源软件,这是它的一大优点.使开发者能更深入的了解其内部实现机制. Struts开放源码框架的创建是为了使开发者在构建基于Ja ...
- cocos代码研究(12)UI之Widget学习笔记
理论基础 Widget类,所有UI控件的基类. 这类继承自ProtectedNode和LayoutParameterProtocol. 如果你想实现自己的UI控件,你应该继承这个类. 被 VideoP ...
- Java基础知识陷阱(十)
本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...