PHP返回XML数据

开发中经常会有用到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,查看源代码的就可以看到效果了。

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

时间: 2024-10-07 03:23:11

PHP返回XML数据的相关文章

PHP AJAX 返回XML数据

例子:利用AJAX间接访问数据库,查出Nation表中的数据,返回XML数据,并将Nation表中的数据显示在下拉列表框中 外层建一个下拉列表框 1 <select id="sel"> 2 </select> JQurey代码 $(document).ready(function(e) { //调用ajax $.ajax({ url:"XMLChuLi.php", dataType:"XML", //返回XML数据 suc

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

Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定!. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring Boot 自动配置原理.实战 Spring Boot 2.x 启动全过程源码分析 更多请在Java技术栈微信公众号后台回复关键字:boot. 如

spring 返回xml数据

要将对象以xml数据形式返回:参考:https://blog.csdn.net/Pnoter/article/details/52218363 1:创建对象时应该填上xml注解,这样才能将对象转换为xml形式. 2:在对象属性上,添加xmlElement可以将属性解析为xml的子元素形式 例如: 对象DemoUser.java package com.li.pojo; import javax.xml.bind.annotation.XmlElement; import javax.xml.bi

SQL Server 返回xml数据

返回格式如 创建临时数据 SELECT IDENTITY(INT,1,1) AS ID,*INTO #TempTableFROM( SELECT  '张三' AS Name,'张家长' AS Parent,12 AS  Age, '男' AS Sex, '+0743 123456' AS Phone,'[email protected]' AS Mail UNION ALL SELECT '李四' AS Name,'李家长' AS Parent,13 AS  Age,'男' AS Sex,nul

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

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

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

有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这些数据. 在WCF中实现将数据以XML或JSON格式返回有Y多种方法,不管你用什么方法,只要得到预期结果就好,米芾说了,笔可以八面出锋,当然了,人家指的是绘画. 这里,老周就挑两种方法来演示,仅供参考,没有考古价值,建议司马子长不要把本文收入<史记>. 第一种方法是用到 WebServiceHos

用TBXML解析XML数据

总的来说,iphone 上可用的解析XML的方式大概有2种类型的. 1.Tree-based API:这种API的处理方式是将XML的结构看成是树,然后把树的各部分看成一个对象来处理,这就是我们说的DOM (Document Object Model)方式.在iPhone的SDK里包含了一个libxml2的框架(Framework)就能进行DOM解析方式.Google的GDataXML也是基于libxml2的,因此在使用GDataXML之前,你需要先导入libxml2. 2.Event-driv

Ajax发送GET、POST请求和响应XML数据案例

1.新建工程 新建一个java web工程,新建一个Servlet文件 AServlet.java,用于返回get和post请求. public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Hello

Ajax返回xml类型数据

ajax可以返回文本类型数据和xml类型数据,xml是计算机通用语言 可以使用js解析返回xml类型数据的dom对象 前端页面 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name=