当前位置:首页 > PHP教程 > php数组 > 列表

php实现xml数据转数组两种方式

发布:smiling 来源: PHP粉丝网  添加日期:2024-03-08 17:41:48 浏览: 评论:0 

这篇文章主要为大家详细介绍了php实现xml数据转数组两种方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以参考下。

方法一、可以使用simplexml_load_string()函数将XML数据转换为数组

  1. $xmlData = '<root><name>John Doe</name><age>30</age></root>'
  2. $xml = simplexml_load_string($xmlData); 
  3. $json = json_encode($xml); 
  4. $array = json_decode($json, true); 
  5. print_r($array); 

php实现xml数据转数组两种方式

首先将XML数据存储在一个字符串中,然后使用simplexml_load_string()函数将其转换为SimpleXMLElement对象。

接下来,使用json_encode()函数将SimpleXMLElement对象转换为JSON字符串,

再使用json_decode()函数将JSON字符串转换为关联数组。最后,使用print_r()函数打印出数组的内容

方法二、使用PHP内置的DOMDocument类来将XML数据转换为数组的方法

  1. $xmlData = '<root><name>John Doe</name><age>30</age></root>'
  2. $xml = new DOMDocument(); 
  3. $xml->loadXML($xmlData); 
  4. $array = domToArray($xml->documentElement); 
  5. print_r($array); 
  6. function domToArray($node) { 
  7.     $array = array(); 
  8.    
  9.     if ($node->hasAttributes()) { 
  10.         foreach ($node->attributes as $attr) { 
  11.             $array[$attr->nodeName] = $attr->nodeValue; 
  12.         } 
  13.     } 
  14.    
  15.     if ($node->hasChildNodes()) { 
  16.         foreach ($node->childNodes as $childNode) { 
  17.             if ($childNode->nodeType == XML_ELEMENT_NODE) { 
  18.                 $array[$childNode->nodeName] = domToArray($childNode); 
  19.             } else if ($childNode->nodeType == XML_TEXT_NODE) { 
  20.                 $array['value'] = $childNode->nodeValue; 
  21.             } 
  22.         } 
  23.     } 
  24.    
  25.     return $array
  26.  
  27. $xmlData = '<root><name>John Doe</name><age>30</age></root>'
  28. $xml = new DOMDocument(); 
  29. $xml->loadXML($xmlData); 
  30. $array = domToArray($xml->documentElement); 
  31. print_r($array); 
  32. function domToArray($node) { 
  33.     $array = array(); 
  34.  
  35.     if ($node->hasAttributes()) { 
  36.         foreach ($node->attributes as $attr) { 
  37.             $array[$attr->nodeName] = $attr->nodeValue; 
  38.         } 
  39.     } 
  40.  
  41.     if ($node->hasChildNodes()) { 
  42.         foreach ($node->childNodes as $childNode) { 
  43.             if ($childNode->nodeType == XML_ELEMENT_NODE) { 
  44.                 $array[$childNode->nodeName] = domToArray($childNode); 
  45.             } else if ($childNode->nodeType == XML_TEXT_NODE) { 
  46.                 $array['value'] = $childNode->nodeValue; 
  47.             } 
  48.         } 
  49.     } 
  50.  
  51.     return $array

php实现xml数据转数组两种方式

这个例子创建了一个DOMDocument对象,并使用loadXML()方法将XML数据加载到该对象中。

然后,使用domToArray()函数将DOM文档转换为数组。

这个函数递归地遍历XML节点,并将节点的名称和值存储在数组中。

如果节点有属性,则也将其作为键值对存储在数组中。

最后,使用print_r()函数打印出数组的内容。

需要注意的是,domToArray()函数是递归的,它能够处理复杂的XML结构。请根据你的XML数据进行适当的调整

方法补充

方法一:

  1. function xmlToArray(string $xml$oldStr = [], $newStr = []) 
  2.     { 
  3.         //过滤特殊xml 格式 
  4.         if (!emptyempty($oldStr)) { 
  5.             $xml = str_replace($oldStr$newStr$xml); 
  6.         } 
  7.         $objectXml = simplexml_load_string($xml);//将文件转换成对象 
  8.         $xmlJson = json_encode($objectXml);//将对象转换个JSON 
  9.         $xmlArray = json_decode($xmlJson, true);//将json转换成数组 
  10.         return $xmlArray
  11.     } 

方法二:数组和XML相互转换

  1. //数组转xml 
  2. function ArrToXml($arr
  3.     if(!is_array($arr) || count($arr) == 0) return ''
  4.       
  5.     $xml = "<xml>"
  6.     foreach ($arr as $key=>$val
  7.     { 
  8.         if (is_numeric($val)){ 
  9.             $xml.="<".$key.">".$val."</".$key.">"
  10.         }else
  11.             $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"
  12.         } 
  13.     } 
  14.     $xml.="</xml>"
  15.     return $xml;  
  16.       
  17. //Xml转数组 
  18. function XmlToArr($xml
  19. {    
  20.     if($xml == ''return ''
  21.     libxml_disable_entity_loader(true); 
  22.     $arr = json_decode(json_encode(simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA)), true);      
  23.     return $arr

方法三:

  1. //获取xml xml转数组 
  2.     private function xmlToarr($xml
  3.     { 
  4.         if (!$xml) { 
  5.             throw new WxPayException("xml数据异常!"); 
  6.         } 
  7.         //将XML转为array 
  8.         //禁止引用外部xml实体 
  9.         libxml_disable_entity_loader(true); 
  10.         $data = json_decode(json_encode(simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA)), true); 
  11.         return $data
  12.     }

Tags: xml数据转数组

分享到: