最近公司要做一个API接口,输出格式要有JSON与XML格式, 在PHP中,输入JSON直接json_encode就可以,但输出XML没有提供函数,于是决定自己写一个。
<?php /**
* 数组转XML类库
*
* @filesource ArrayToXML.php
* @author gentwolf
* @version 1.0 2013/08/23
*
* 使用说明:
* echo ArrayToXml::parse($array, 'root');
*/ class ArrayToXML {
//文档对象
private static $doc = NULL;
//版本号
private static $version = '1.0'; /**
* 初始化文档版本及编码
*
* @param string $version 版本号
* @param string $encoding XML编码
*/
public static function init($version, $encoding) {
self::$doc = new DomDocument($version, $encoding);
self::$doc->formatOutput = true;
} /**
* 转换数组到XML
*
* @param array $array 要转换的数组
* @param string $rootName 要节点名称
* @param string $version 版本号
* @param string $encoding XML编码
*
* @return string
*/
public static function parse($array, $rootName = 'root', $version = '1.0', $encoding = 'UTF-8') {
self::init($version, $encoding); //转换
$node = self::convert($array, $rootName);
self::$doc->appendChild($node); return self::$doc->saveXML();
} /**
* 递归转换
*
* @param array $array 数组
* @param string $nodeName 节点名称
*
* @return object (DOMElement)
*/
private static function convert($array, $nodeName) {
if (!is_array($array)) return false; //创建父节点
$node = self::createNode($nodeName); //循环数组
foreach ($array as $key => $value) {
$element = self::createNode($key); //如果不是数组,则创建节点的值
if (!is_array($value)) {
$element->appendChild(self::createValue($value));
$node->appendChild($element);
} else {
//如果是数组,则递归
$node->appendChild(self::convert($value, $key, $element));
}
}
return $node;
} private static function createNode($name) {
$node = NULL; //如果是字符串,则创建节点
if (!is_numeric($name)) {
$node = self::$doc->createElement($name);
} else {
//如果是数字,则创建默认item节点
$node = self::$doc->createElement('item');
} return $node;
} /**
* 创建文本节点
*
* @param string || bool || integer $value
*
* @return object (DOMText || DOMCDATASection );
*/
private static function createValue($value) {
$textNode = NULL; //如果是bool型,则转换为字符串
if (true === $value || false === $value) {
$textNode = self::$doc->createTextNode($value ? 'true' : 'false');
} else {
//如果含有HTML标签,则创建CDATA节点
if (strpos($value, '<') > -1) {
$textNode = self::$doc->createCDATASection($value);
} else {
$textNode = self::$doc->createTextNode($value);
}
} return $textNode;
}
}

PHP中数组转换为XML格式的更多相关文章

  1. JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面

    将List类型数组转换为JSon格式的对象字符串,返回给界面 所需要导入的包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * ...

  2. JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面

    将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...

  3. Python:numpy数组转换为json格式

    在python中,如何将一个numpy数组转换为json格式? 这是最近遇到的一个问题,做个笔记. 假设arr为numpy数组,将其转换为json格式: 总体思想是①首先转换为python的list, ...

  4. 织梦dedecms中html和xml格式的网站地图sitemap制作方法

    sitemap是网站上各网页的列表.创建并提交sitemap有助于百度(Google)发现并了解您网站上的所有网页,包括百度通过传统抓取方式可能找不到的网页.还可以使用sitemap提供有关你网站的其 ...

  5. 数组转xml格式/xml格式转数组

    数组转xml格式 $arr=array( 'username'=>'huahua', 'password'=>'123456', 'number'=>'15889652911', ) ...

  6. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  7. jansen字符串转换为xml格式

    /// <summary> /// json字符串转换为Xml对象 /// </summary> /// <param name="sJson"> ...

  8. Java POI 读取Excel数据转换为XML格式

    1.首先要下载poi相关的包:http://poi.apache.org/  ,以下是所需的jar包 2.贴上详细的代码 public class ExcelToXml { /** * 将excel的 ...

  9. javascript 中的JSON.stringify - 将对象和数组转换为json格式(来源于网络)

          JSON.stringify 函数 (JavaScript) 将 JavaScript 值转换为 JavaScript 对象表示法 (Json) 字符串.     JSON.stringi ...

随机推荐

  1. 大数据笔记02:大数据之Hadoop的生态系统和版本

    1.Hadoop的生态系统: (1)图1: (2)图2: 图1 和 图2 都是形象说明了Hadoop的生态圈. 2.举例介绍Hadoop生态圈的小工具: (1)Hive工具(中文意思:小蜜蜂) 利用H ...

  2. HDU3757

    题意:一些团队因为任务要去避难所,并且每个避难所必须要有团队在,避难所的数量小于等于团队的数量, 团队去避难所的消耗油量与路程成正比,求解最小耗油量.题目来源:2010 Northeastern Eu ...

  3. JQuery简单实现图片轮播效果

    很多页面都需要用到界面轮播,但是用原生js相对来说比较复杂,用jQuery实现效果比较迅速,写个简单的demo 1.首先在HTML页面要放置轮播图案位置插入div,这里写了轮播图片数量为3张,所以定义 ...

  4. (转)XML CDATA是什么?

    解析数据 XML 解析器通常情况下会处理XML文档中的所有文本. 当XML元素被解析的时候,XML元素内部的文本也会被解析: <message>This text is also pars ...

  5. ReportViewer2010冻结行列

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewTrackingVer ...

  6. SQL Server 2008 R2 的版本和组件

    SQL Server 2008 R2 的版本和组件 SQL Server 2008 R2   其他版本 SQL Server 2008 SQL Server 2005 SQL Server 2012 ...

  7. windows下安装php笔记

    为了更深入的理解下服务端的配置 ,上篇文章讲了如何在windows下安装apache , 接下来再研究下在windows下安装php并且结合apache运行php环境, 纯属学习用 ^^ ,如果嫌麻烦 ...

  8. MySQL查询优化处理

    查询的生命周期的下一步是将一个sql转化成一个执行计划,MySQL再依照这个执行计划和存储引擎进行交互.这包括多个子阶段:解析sql,预处理,优化sql执行计划.这个过程中任何错误(例如语法错误)都可 ...

  9. epoll 中EPOLLIN 和 EPOLLOUT

    epoll主要是事件回调运行的,我们使用socket的时候主要使用两个事件 EPOLLOUT事件:EPOLLOUT事件只有在连接时触发一次,表示可写,其他时候想要触发,那你要先准备好下面条件:1.某次 ...

  10. Oracle数据库之序列

    Oracle数据库之序列(sequence) 序列是一个计数器,它并不会与特定的表关联.我们可以通过创建Oracle序列和触发器实现表的主键自增.序列的用途一般用来填充主键和计数. 一.创建序列 语法 ...