这两天在公司写和各应用商店应用内搜索的接口,大致就像百度应用内搜索这样的东西,具体可以点下面的链接查看。

百度应用内搜索

有的应用商店需要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主页上,有兴趣的可以去查看。

xml.class.php

PHP自定义XML类实现数组到XML文件的转换的更多相关文章

  1. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  2. [引]LINQ to XML 类概述

    本文转自:http://msdn.microsoft.com/zh-cn/library/bb387023.aspx 本主题提供 System.Xml.Linq 命名空间中 LINQ to XML 类 ...

  3. 自定义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 ...

  4. JAXB—Java类与XML文件之间转换

    JAXB-Java类与XML文件之间转换 简介         JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...

  5. LINQ系列:LINQ to XML类

    LINQ to XML由System.Xml.Linq namespace实现,该namespace包含处理XML时用到的所有类.在使用LINQ to XML时需要添加System.Xml.Linq. ...

  6. .NET操作Xml类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.I ...

  7. Flex与Java交互(Flex调用java类展示数据)解析xml展示数据

    Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...

  8. XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

    以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  9. as3 XML类和XMLList类的区别

    一.XML类和XMLList类的区别       AS3.0中,处理XML主要用到两个主类,XML类和XMLList类,这两个类的很多内容是共通的.应该有人会问,XML和XMLList的区别是什么? ...

随机推荐

  1. 使用MySQLMTOP监控MySQL性能(一)

    一.环境说明 1.服务器角色 服务器角色 172.18.35.29 10.160.22.14 (MySQL Master) 10.160.22.47 (MySQL Slave) 监控点 YES NO ...

  2. couldn't connect to host

    “couldn't connect to host” 这样的错误可能是主机不可到达,或者端口不可到达. ping OK只代表主机可以到达. 端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端 ...

  3. 浙江工业大学校赛 XiaoWei的战斗力

    XiaoWei的战斗力 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. 使用docx4j编程式地创建复杂的Word(.docx)文档

    原文链接:Create complex Word (.docx) documents programatically with docx4j 原文作者:jos.dirksen 发表日期:2012年2月 ...

  5. 为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法

    场景: 有1.2亿条问答数据,相同问题的不同答案为不同条的数据,且该表数据逐日递增: 第三方需求(不合理): 将问题.答案数据分别放入问题表.答案表: 问题表的主键为整数,在答案表中,每行数据有相应的 ...

  6. Python开发【Django】:Form组件

    Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...

  7. mysql 数据操作 单表查询 group by 注意

    GROUP BY 单独使用GROUP BY关键字分组 SELECT post FROM employee GROUP BY post; 注意:我们按照post字段分组,那么select查询的字段只能是 ...

  8. Struts,Spring,Hibernate优缺点

    Struts跟Tomcat.Turbine等诸 多Apache项目一样,是开源软件,这是它的一大优点.使开发者能更深入的了解其内部实现机制. Struts开放源码框架的创建是为了使开发者在构建基于Ja ...

  9. cocos代码研究(12)UI之Widget学习笔记

    理论基础 Widget类,所有UI控件的基类. 这类继承自ProtectedNode和LayoutParameterProtocol. 如果你想实现自己的UI控件,你应该继承这个类. 被 VideoP ...

  10. Java基础知识陷阱(十)

    本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...