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

百度应用内搜索

有的应用商店需要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. 边的双联通+缩点+LCA(HDU3686)

    Traffic Real Time Query System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  2. Spring应用配置文件上传的两种方案

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  3. java之面向对象三大特征(封装,继承,多态)

    一.封装 封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的对外方法进行内部信息的操作和访问. 封装可以达到以下目的: 1)隐藏类的实现细节 2)让使用者只 ...

  4. 精通linux设备驱动开发 笔记

      3.2.7 错误处理   #include <linux/err.h> char * collect_data(char *userbuffer) { char *buffer; /* ...

  5. Day19 客户关系系统实战

    day19 今日内容 Service事务 客户关系管理系统     Service事务 在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础! 1 DAO中的事务 ...

  6. Atom+Nuclide(Windows)开发ReactNative

    1 安装Atom,Nucilde 首先需要到官网下载Atom: 然后安装Nuclide, 重新打开Atom,会看到Nucilde的界面且菜单项会多出一个Nucilde 2 创建ReactNative ...

  7. SLAM FOR DUMMIES 第5-8章 中文翻译

    5,SLAM的处理过程 SLAM过程包括许多步骤,该过程的目标是使用环境更新机器人的位置.由于机器人的里程计通常是存在误差的,我们不能直接依赖于里程计.我们可以用激光扫描环境来校正机器人的位置,这是通 ...

  8. mybatis 中jdbctype和javatype的对应关系

    1:mybatis 中jdbctype和javatype的对应关系 JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String ...

  9. hdfs HA原理

    早期的hadoop版本,NN是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法使用.为了解决这个问题,出现了一堆针对HDFS HA的解决方案(如:Linux ...

  10. Sparsity稀疏编码(二)

           为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),需要把他们转成数学语言,因为数学语言作为一种严谨的语言,可以利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes v ...