开发中经常会有用到XML格式数据的时候,那么用PHP怎么来将数组格式的数据用XML格式返回呢?

新建一个类文件,叫ArrayToXml.php

<?php
/**
 * 数组转XML类
 * 使用方法:调用类中的parse方法,传入数组和节点名称
 */
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;
    }
}
?>

再新建一个index.php文件:

<?php
  include('ArrayToXMLS.php');
  $data = array(
      'cehi_one' => array(
          'title1' => '测试标题一',
          'content1' => '测试内容一'
      ),
      'ceshi_two' => array(
          'title2' => ' 测试标题二 ',
          'content2' => '测试内容二',
          'link' => 'http://www.cnblogs.com/kekeer'
      ),
      'ceshi_three' => array(
          array(
              'title3' => '测试标题二',
              'content3' => '测试内容二',
              'link' => 'http://www..com/'
          ),
          array(
              'title2' => '测试二',
              'content2' => '测试内容二',
              'link' => 'http://www.cnblogs.com/kekeer'
          )
      )
  );
  $api = new ArrayToXML();
  $rs = $api->parse($data);
  echo $rs;
?>

运行index.php,查看源代码的就可以看到效果了。

注:类文件感谢原作者的分享。

PHP返回XML数据的更多相关文章

  1. Spring Boot 返回 XML 数据,一分钟搞定!

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  2. ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题

    原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...

  3. PHP AJAX 返回XML数据

    例子:利用AJAX间接访问数据库,查出Nation表中的数据,返回XML数据,并将Nation表中的数据显示在下拉列表框中 外层建一个下拉列表框 </select> JQurey代码 $( ...

  4. spring 返回xml数据

    要将对象以xml数据形式返回:参考:https://blog.csdn.net/Pnoter/article/details/52218363 1:创建对象时应该填上xml注解,这样才能将对象转换为x ...

  5. java 解析http返回xml数据

    //post 请求 private static String sendPost(String url, String urlParameters) throws Exception { URL ob ...

  6. 纯servlet返回xml数据

    ... void doget..... response.setContentType("application/xml");//设置格式  PrintWriter out = r ...

  7. C# 编写的webservice 怎样返回XML数据

    [WebMethod] public string GetXml() { string sConStr = ConfigurationManager.ConnectionStrings["c ...

  8. 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据

    有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...

  9. WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

    Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// & ...

随机推荐

  1. MYSQL中replace into的用法

    新建一个test表,三个字段,id,title,uid,  id是自增的主键,uid是唯一索引: 插入两条数据 '); ');执行单条插入数据可以看到,执行结果如下: [SQL]insert into ...

  2. Hibernate的批量插入(&&JDBC)

    来自: http://blog.csdn.net/an_2016/article/details/51759890 一.批量插入(两种方式) 1,通过hibernate缓存 如果这样写代码进行批量插入 ...

  3. XPlane android 2D手游开发实战

    android 飞行射击游戏类 采用 xamarin 跨平台开发技术  纯C#语言编写 操作简单 1.手指拖动飞机 躲避敌机 2.通过吃敌机爆炸后遗落的物品增加各种属性 3.双击战机放大技能 4.目前 ...

  4. struts2实现改变超链接的显示方式

    问题来源:我们看别人家专业的网站的时候,会发现他们的超链接都是这样的http://www.cnblogs.com/ivictor/p/5522383.html 这是一个连接到某一篇文章的超链接,我们一 ...

  5. Java8闭包

    闭包在很多语言中都存在,例如C++,C#.闭包允许我们创建函数指针,并把它们作为参数传递,Java编程语言提供了接口的概念,接口中可以定义抽象方法,接口定义了API,并希望用户或者供应商来实现这些方法 ...

  6. 【转】Android APK反编译就这么简单 详解(附图)

    转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...

  7. TRUNCATE TABLE (Transact-SQL)

    删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源 ...

  8. 查看linux系统版本命令 (转)

    查看linux系统版本命令 分类: Linux 知识小结2011-10-10 15:26 240162人阅读 评论(9) 收藏 举报 linuxredhatdebianx86susesun 一.查看内 ...

  9. JavaScript对象的chapterIII

    二.DOM对象: DOM (document object model) 文档对象模型,它定义了操作文档对象的接口. DOM 把一份html文档表示为一棵家谱树,使用parent(父), child( ...

  10. Query Designer:Condition,根据KeyFigure值来过滤数据

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...