php实现的XML操作(读取)封装类完整实例

 更新时间:2017年7月6日 23:34  点击:1908
小编推荐的这篇文章介绍了php实现的XML操作(读取)封装类完整实例,非常实用,有兴趣的同学可以看看

 

 代码如下 复制代码

<?xmlversion="1.0"encoding="utf-8"standalone="no"?>

<CustomizationSettingversion='1.0'>

  <!-- 各通用配置信息,作为Settings子节点,方便统一解析 -->

  <!-- AgentSettings 由网页定制生成,默认无次节点-->

  <AgentSettings>

    <!-- 以Setting 作为节点名,考虑扩展时,不需修改客户端接口。 type类型方便网页进行显示控件区分 -->

    <!-- 代理定制类型,默认:Normal。在网页区分语言定制的情况下,以英文、或列表第一种语言的修改为准 -->

    <Settingname='CustomizeType'type='enum'>Normal|DR</Setting>

    <!-- 产品名称,AgentType为DR时,用于获取代理购买地址 -->

    <Settingname='AppName'type='string'>Wondershare Vedio Convertor</Setting>

    <!-- 品牌名称,AgentType为DR时,用于获取代理购买地址 -->

    <Settingname='Publisher'type='string'>Wondershare</Setting>

    <!-- 购买地址生成方式,默认:Customize,由网页生成,默认无次节点 -->

    <Settingname='OrderPageGenType'type='enum'>Customize|Affiliate</Setting>

    <!-- Affiliate ID, OrderPageGenType为Affiliate才有效,默认为空值 -->

    <Settingname='AID'type='string'>143724583</Setting>

    <!-- 启动Affiliat 购买地址启用短链接, OrderPageGenType为Affiliate才有效,默认:0 -->

    <Settingname='UseShortAffiliateOrderLink'type='bool'>0|1</Setting>

    <!-- 定制输出名称 -->

    <Settingname='OutputFileName'type='string'><![CDATA[1464646.mac-transpod-lite_full879.dmg]]></Setting>

  </AgentSettings>

  <!-- 各语言定制信息,作为Languages子节点,方便统一解析, 以及扩展 -->

  <Languages>

    <!-- 语言名称,统一使用CBS后台语言数据规范 -->

    <Languagename='English'>

      <Settings>

        <!-- 产品ID,多语言中可被定制 -->

        <Settingname='PID'type='stirng'>11642</Setting>

        <!-- 支持弹出广告,默认:1,最终能否弹广告还取决于网站的设置,这里主要用于关闭的总控制 -->

        <Settingname='EnabelAD'type='bool'>1|0</Setting>

        <!-- 支持升级,默认:1 -->

        <Settingname='EnableUpdate'type='bool'>1|0</Setting>

        <!-- CBS跳转链接类型,只对InstallJumpPage,UninstallJumpPage,RegisterJumpPage,UpdateJumpPage有效,默认:Jump -->

        <Settingname='CBSJumpType'type='enum'>Jump|Hide|Disable</Setting>

        <!-- 支持Tisp消息-->

        <Settingname='TipsEnable'type='bool'>1|0</Setting>

        <!-- 支持弹出产品目录推荐, 默认:1-->

        <Settingname='EnableProductSuit'type='bool'>1|0</Setting>

      </Settings>

      <!-- 链接地址作为URLS子节点,方便统一解析 -->

      <URLS>

        <!-- 不使用'**Page'直接作为节点名称,避免自定义地址的名称与XML节点名称规范冲突,如就数字开头,同时支持网页界面根据不同产品显示链接名称,而且扩展时,而不需修改客户端接口 -->

        <!-- 购买地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <!-- 区分地址类型order, jump, comm, custom方便网页显示归类 -->

        <URLname='OrderPage'type='order'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 安装跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='InstallJumpPage'type='jump'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 卸载跳转地址,Mac产品无此项。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='UninstallJumpPage'type='jump'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 注册跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='RegisterJumpPage'type='jump'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 升级跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='UpdateJumpPage'type='jump'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 公司主页地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='HomePage'type='comm'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 产品主页地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='ProductPage'type='comm'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 支持地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='SupportPage'type='comm'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 联系客服地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='ContactPage'type='comm'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 在线帮助地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='HelpOnlinePage'type='comm'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 自定义地址,最多可定义5个。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='3DPage'type='custom'updateReserve='0|1'><![CDATA[http://...]]></URL>

        <!-- 自定义地址,最多可定义5个。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->

        <URLname='GPUPage'type='custom'updateReserve='0|1'><![CDATA[http://...]]></URL>

      </URLS>

      <!-- 待扩展信息,在客户端接口中预先处理 -->

    </Language>

    <!-- 产品不支持某种语言,则不需要该<Language>节点 -->

    <Languagename='Traditional Chinese(HK)'>

        <!-- 同上 -->

    </Language>

    <Languagename='Chinese'>

        <!-- 同上 -->

    </Language>

    <Languagename='Portuguese'>

        <!-- 同上 -->

    </Language>

    <Languagename='Japanese'>

        <!-- 同上 -->

    </Language>

    <Languagename='Korean'>

        <!-- 同上 -->

    </Language>

    <Languagename='Hebrew'>

        <!-- 同上 -->

    </Language>

    <Languagename='Arabic'>

        <!-- 同上 -->

    </Language>

    <Languagename='Spanish'>

        <!-- 同上 -->

    </Language>

    <Languagename='Polish'>

        <!-- 同上 -->

    </Language>

    <Languagename='German'>

        <!-- 同上 -->

    </Language>

    <Languagename='French'>

        <!-- 同上 -->

    </Language>

    <Languagename='Italian'>

        <!-- 同上 -->

    </Language>

    <Languagename='Spanish(Spain)'>

        <!-- 同上 -->

    </Language>

    <Languagename='Spanish(Mexico)'>

        <!-- 同上 -->

    </Language>

    <Languagename='Traditional Chinese(TW)'>

        <!-- 同上 -->

    </Language>

    <Languagename='Dutch'>

        <!-- 同上 -->

    </Language>

    <Languagename='Russian'>

        <!-- 同上 -->

    </Language>

  </Languages>

</CustomizationSetting>

 

封装了下读取xml操作类:

 

 代码如下 复制代码

<?php

/**

 * xml操作基类

 */

classXmlBase {

  publicfunction__construct() {

  }

  /**

   * 加载xml

   * @param string $xml xml路径或xml字符串

   * @param bool $isXmlStr 是否是xml字符串

   */

  protectedfunction_loadXml($xml,$isXmlStr= FALSE) {

    $xmlObj=newDOMDocument();

    if($isXmlStr) {

      $xmlObj->loadXML($xmlNewStr);

    }else{

      $xmlObj->load($xml);

    }

    return$xmlObj;

  }

  /**

   * 获取某个标签节点

   * @param $parentnode 父节点

   * @param $tagName 标签名 // 不区分大小写

   * @return node 节点对象

   */

  protectedfunction_getNode($parentNode,$tagName) {

    $childNodes=$this->_getNodes($parentNode);

    foreach($childNodesas$node) {

      $nodeName=strtolower(trim($node->nodeName));

      $tagName=strtolower(trim($tagName));

      if($nodeName==$tagName) {

        return$node;

      }

    }

    returnNULL;

  }

  /**

   * 获取xml子节点

   * @param $parentNode 父节点

   * @param $tagName 子节点标签 // 不区分大小写

   */

  protectedfunction_getNodes($parentNode,$tagName='') {

    $nodes=array();

    if($tagName) {

      $nodes=$this->_getSpecialNodes($parentNode,$tagName);

    }else{

      $nodes=$this->_getAllNodes($parentNode);

    }

    return$nodes;

  }

  /**

   * 获取所有的节点

   * @param $parentNode 父节点

   */

  protectedfunction_getAllNodes($parentNode) {

    $nodes=array();

    foreach($parentNode->childNodesas$node) {

      if($node->nodeType == 1) {

        $nodes[] =$node;

      }

    }

    return$nodes;

  }

  /**

   * 获取指定标签的节点

   * @param $parentNode 父节点

   * @param $tagName 节点名称

   */

  protectedfunction_getSpecialNodes($parentNode,$tagName) {

    $nodes=array();

    $tagName=strtolower(trim($tagName));

    foreach($parentNode->childNodesas$node) {

      $nodeName=strtolower(trim($node->nodeName));

      if($node->nodeType == 1 &&$nodeName==$tagName) {

        $nodes[] =$node;

      }

    }

    return$nodes;

  }

  /**

   * 获取节点属性值

   *

   * @param $node 节点对象

   * @param $attrName 节点名字 // 不区分大小写

   */

  protectedfunction_getAttr($node,$attrName) {

    $attrName=strtolower($attrName);

    foreach($node->attributesas$attr) {

      $nodeName=strtolower($attr->nodeName);

      //$nodeValue = strtolower($attr->nodeValue);

      $nodeType=strtolower($attr->nodeType);

      if($nodeType== 2 &&$nodeName==$attrName) {

        unset($attrName,$nodeName,$nodeType);

        return$attr->nodeValue;

      }

    }

    return'';

  }

}

?>

 

小编今天推荐的这篇文章介绍了php实现的xml操作类,涉及php针对数组、xml的转换、序列化、反序列化等相关操作技巧,有兴趣的同学可以参考一下

本文实例讲述了PHP实现的XML操作类。分享给大家供大家参考,具体如下:

这是一个接口程序,需要大量分析解析XML,PHP的xml_parse_into_struct()函数不能直接生成便于使用的数组,而SimpleXML扩展在PHP5中才支持,于是逛逛搜索引擎,在老外的网站上找到了一个不错的PHP XML操作类。

一、用法举例:

1、将XML文件解释成便于使用的数组:

<?php
include('xml.php');//引用PHP XML操作类
$xml=file_get_contents('data.xml');//读取XML文件
//$xml = file_get_contents("php://input"); //读取POST过来的输入流
$data=XML_unserialize($xml);
echo'<pre>';
print_r($data);
echo'</pre>';
?>

data.xml文件:

<?xmlversion="1.0"encoding="GBK"?>
<video>
<upload>
<videoid>998</videoid>
<name><![CDATA[回忆未来]]></name>
<memo><![CDATA[def]]></memo>
<up_userid>11317</up_userid>
</upload>
</video>

利用该XML操作类生成的对应数组(汉字编码:UTF-8):

Array
(
 [video] => Array
  (
   [upload] => Array
    (
     [videoid] => 998
     [name] => 回忆未来
     [memo] => def
     [up_userid] => 11317
    )
  )
)

2、将数组转换成XML文件:

<?php
include('xml.php');//引用PHP XML操作类
$xml= XML_serialize($data);
?>

二、PHP XML操作类源代码:

<?php
###################################################################################
# XML_unserialize: takes raw XMLasa parameter (a string)
#andreturns an equivalent PHP data structure
###################################################################################
function& XML_unserialize(&$xml){
 $xml_parser= &newXML();
 $data= &$xml_parser->parse($xml);
 $xml_parser->destruct();
 return$data;
}
###################################################################################
# XML_serialize: serializes any PHP data structure into XML
# Takes one parameter: the data to serialize. Must be anarray.
###################################################################################
function& XML_serialize(&$data,$level= 0,$prior_key= NULL){
 if($level== 0){ ob_start();echo'<?xml version="1.0" ?>',"\n"; }
 while(list($key,$value) = each($data))
  if(!strpos($key,' attr')) #ifit's not an attribute
   #we don't treat attributes by themselves, soforan emptyempty element
   # that has attributes you still need to set the element to NULL
   if(is_array($value)andarray_key_exists(0,$value)){
    XML_serialize($value,$level,$key);
   }else{
    $tag=$prior_key?$prior_key:$key;
    echostr_repeat("\t",$level),'<',$tag;
    if(array_key_exists("$key attr",$data)){ #ifthere's an attributeforthis element
     while(list($attr_name,$attr_value) = each($data["$key attr"]))
      echo' ',$attr_name,'="',htmlspecialchars($attr_value),'"';
     reset($data["$key attr"]);
    }
    if(is_null($value))echo" />\n";
    elseif(!is_array($value))echo'>',htmlspecialchars($value),"</$tag>\n";
    elseecho">\n",XML_serialize($value,$level+1),str_repeat("\t",$level),"</$tag>\n";
   }
 reset($data);
 if($level== 0){$str= &ob_get_contents(); ob_end_clean();return$str; }
}
###################################################################################
# XMLclass: utilityclassto be used with PHP's XML handling functions
###################################################################################
classXML{
 var$parser; #a reference to the XML parser
 var$document; #the entire XML structure built up so far
 var$parent; #a pointer to the current parent - the parent will be anarray
 var$stack; #a stack of the most recent parent at each nesting level
 var$last_opened_tag; #keeps track of the last tag opened.
 functionXML(){
   $this->parser = &xml_parser_create();
  xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
  xml_set_object(&$this->parser, &$this);
  xml_set_element_handler(&$this->parser,'open','close');
  xml_set_character_data_handler(&$this->parser,'data');
 }
 functiondestruct(){ xml_parser_free(&$this->parser); }
 function& parse(&$data){
  $this->document =array();
  $this->stack =array();
  $this->parent = &$this->document;
  returnxml_parse(&$this->parser, &$data, true) ?$this->document : NULL;
 }
 functionopen(&$parser,$tag,$attributes){
  $this->data =''; #stores temporary cdata
  $this->last_opened_tag =$tag;
  if(is_array($this->parent)andarray_key_exists($tag,$this->parent)){ #ifyou've seen this tag before
   if(is_array($this->parent[$tag])andarray_key_exists(0,$this->parent[$tag])){ #ifthe keys are numeric
    #this is the thirdorlater instance of$tagwe've come across
    $key= count_numeric_items($this->parent[$tag]);
   }else{
    #this is the second instance of$tagthat we've seen. shift around
    if(array_key_exists("$tag attr",$this->parent)){
     $arr=array('0 attr'=>&$this->parent["$tag attr"], &$this->parent[$tag]);
     unset($this->parent["$tag attr"]);
    }else{
     $arr=array(&$this->parent[$tag]);
    }
    $this->parent[$tag] = &$arr;
    $key= 1;
   }
   $this->parent = &$this->parent[$tag];
  }else{
   $key=$tag;
  }
  if($attributes)$this->parent["$key attr"] =$attributes;
  $this->parent = &$this->parent[$key];
  $this->stack[] = &$this->parent;
 }
 functiondata(&$parser,$data){
  if($this->last_opened_tag != NULL) #you don't need to store whitespace in between tags
   $this->data .=$data;
 }
 functionclose(&$parser,$tag){
  if($this->last_opened_tag ==$tag){
   $this->parent =$this->data;
   $this->last_opened_tag = NULL;
  }
  array_pop($this->stack);
  if($this->stack)$this->parent = &$this->stack[count($this->stack)-1];
 }
}
functioncount_numeric_items(&$array){
 returnis_array($array) ?count(array_filter(array_keys($array),'is_numeric')) : 0;
}
?>

XML转成数组是一件很简单的事情只要加载过来的数据我们进行解析即可实现,下面整理了不少关于xml转换成数组的例子,我们来参考一下。

例子

现在有一个uncletoo.xml的配置文件,格式如下:

<h6>Step 1: XML File</h6>
<?xml version='1.0'?>
<moleculedb>
    <molecule name='Benzine'>
        <symbol>ben</symbol>
        <code>A</code>
    </molecule>
    <molecule name='Water'>
        <symbol>h2o</symbol>
        <code>K</code>
    </molecule>
<molecule name='Parvez'>
        <symbol>h2o</symbol>
        <code>K</code>
    </molecule>
</moleculedb>


1、读XML文件内容,并保存到字符串变量中

下面我们使用PHP自带的file_get_contents()函数将文件内容读取到一个字符串变量中:

$xmlfile = file_get_contents($path);

此时$xmlfile变量的值如下:

2、将字符串转换为对象

这一步我们将使用simplexml_load_string()函数,将上一步得到的字符串转换为对象(Object):

$ob= simplexml_load_string($xmlfile);

此时$ob的值如下:


3、将对象转换为JSON

上一步转换成对象后,现在,我们要将对象转换成JSON格式字符串:

$json  = json_encode($ob);

此时$json变量的值如下:


4、解析JSON字符串

这也是最后一步了,我们需要将JSON格式的字符串转换为我们需要的数组:

$configData = json_decode($json, true);

现在$configData里存储的数据就是我么最后要得到的数组,如下:


完整转换代码:

 代码如下 复制代码


<?php
$xmlfile = file_get_contents($path);
$ob= simplexml_load_string($xmlfile);
$json  = json_encode($ob);
$configData = json_decode($json, true);
?>

下面为网上整理的xml转换数组函数


例子一,将XML转成数组

 代码如下 复制代码

如果你使用 curl 获取的 xml data
$xml = simplexml_load_string($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
如果是直接获取 URL 数据的话
$xml = simplexml_load_file($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
先把 simplexml 对象转换成 json,再将 json 转换成数组。

例子二,通过遍历

 代码如下 复制代码

// Xml 转 数组, 包括根键
function xml_to_array( $xml )
{
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches))
{
$count = count($matches[0]);
for($i = 0; $i < $count; $i++)
{
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml ))
{
$arr[$key] = xml_to_array( $subxml );
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
// Xml 转 数组, 不包括根键
function xmltoarray( $xml )
{
$arr = xml_to_array($xml);
$key = array_keys($arr);
return $arr[$key[0]];
}

例子三

 代码如下 复制代码

function simplexml_obj2array($obj){
      if ($obj instanceof SimpleXMLElement) {
       $obj = (array)$obj;
      }
    
      if (is_array($obj)) {
       $result = $keys = array();
       foreach( $obj as $key=>$value)
       {
        isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
    
        if( $keys[$key] == 1 )
        {
         $result[$key] = simplexml_obj2array($value);
        }
        elseif( $keys[$key] == 2 )
        {
         $result[$key] = array($result[$key], simplexml_obj2array($value));
        }
        else if( $keys[$key] > 2 )
        {
         $result[$key][] = simplexml_obj2array($value);
        }
       }
       return $result;
      } else {
       return $obj;
      }
 }
$xml=simplexml_load_file("D:/ www.111cn.net /lib/books.xml");
 
$rss = simplexml_obj2array($xml);

数组与XML方法有不少如直接使用遍历数组然后生成xml同时也可以使用DOMDocument来生成xml,具体的方法与步骤如下所示。

PHP将数组转换成XML

PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如:

 代码如下 复制代码

function arrayToXml($arr){
    $xml = "<root>";
    foreach ($arr as $key=>$val){
        if(is_array($val)){
            $xml.="<".$key.">".arrayToXml($val)."</".$key.">";
        }else{
            $xml.="<".$key.">".$val."</".$key.">";
        }
    }
    $xml.="</root>";
    return $xml;
}

我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。

另一种方法是利用DOMDocument来生成xml结构:

 代码如下 复制代码

function arrayToXml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root"); 
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
            
        }else {
            arrayToXml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}

它同样可以将数组转换成xml,而且支持多维数组,生成的xml中文也不会乱码。

PHP将XML转换成数组

做接口开发的时候经常会碰到别人提交给你的是xml格式的数据,常见的微信接口、支付宝接口等,他们的接口如发送消息通信都是xml格式的,那么我们先想办法拿到这个xml数据,然后再将其转化成数组。
假设我们获取到一个这样的XML:

 代码如下 复制代码

<root>
<user>月光光abcd</user>
<pvs>13002</pvs>
<ips>
<baidu_ip>1200</baidu_ip>
<google_ip>1829</google_ip>
</ips>
<date>2016-06-01</date>
</root>

通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。

 代码如下 复制代码
function xmlToArray($xml){    
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val = json_decode(json_encode($xmlstring),true);  
    return $val;
}

得到数组后,我们就可以对数据进行各种处理了。

下面是网上的

 代码如下 复制代码

class ArrayToXML
{
    /**
     * The main function for converting to an XML document.
     * Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
     *
     * @param array $data
     * @param string $rootNodeName - what you want the root node to be - defaultsto data.
     * @param SimpleXMLElement $xml - should only be used recursively
     * @return string XML
     */
    public static function toXml($data, $rootNodeName = 'data', $xml=null)
    {
        // turn off compatibility mode as simple xml throws a wobbly if you don't.
        if (ini_get('zend.ze1_compatibility_mode') == 1)
        {
            ini_set ('zend.ze1_compatibility_mode', 0);
        }
       
        if ($xml == null)
        {
            $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
        }
       
        // loop through the data passed in.
        foreach($data as $key => $value)
        {
            // no numeric keys in our xml please!
            if (is_numeric($key))
            {
                // make string key...
                $key = "unknownNode_". (string) $key;
            }
           
            // replace anything not alpha numeric
            $key = preg_replace('/[^a-z]/i', '', $key);
           
            // if there is another array found recrusively call this function
            if (is_array($value))
            {
                $node = $xml->addChild($key);
                // recrusive call.
                ArrayToXML::toXml($value, $rootNodeName, $node);
            }
            else
            {
                // add single node.
                                $value = htmlentities($value);
                $xml->addChild($key,$value);
            }
           
        }
        // pass back as string. or simple xml object if you want!
        return $xml->asXML();
    }
}

下面是我自己编辑的代码

 代码如下 复制代码

function arrtoxml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root");
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
           
        }else {
            arrtoxml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}

XML转成数组

 代码如下 复制代码

如果你使用 curl 获取的 xml data
$xml = simplexml_load_string($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
如果是直接获取 URL 数据的话
$xml = simplexml_load_file($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
先把 simplexml 对象转换成 json,再将 json 转换成数组。

[!--infotagslink--]

相关文章

  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • c# 对CSV文件操作(写入、读取、修改)

    这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下...2020-11-03
  • python读取和保存mat文件的方法

    本文主要介绍了python读取和保存mat文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-25
  • 原生js实现fadein 和 fadeout淡入淡出效果

    js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android中用HttpClient实现Http请求通信

    本文我们需要解决的问题是如何实现Http请求来实现通信,解决Android 2.3 版本以后无法使用Http请求问题,下面请看正文。 Android开发中使用HttpClient来开发Http程序...2016-09-20
  • perl大文件读取处理的模块介绍

    perl CPAN中有一个Tie-File 模块极大方便了对大文件的操作...2020-06-29
  • 使用MSScriptControl 在 C# 中读取json数据的方法

    下面小编就为大家带来一篇使用MSScriptControl 在 C# 中读取json数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#实现appSettings节点读取与修改的方法

    这篇文章主要介绍了C#实现appSettings节点读取与修改的方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • golang文件读取-按指定BUFF大小读取方式

    这篇文章主要介绍了golang文件读取-按指定BUFF大小读取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-22
  • Java读取PDF中的表格的方法示例

    本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22