当前位置:首页 > 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.  
  28. $xmlData = '<root><name>John Doe</name><age>30</age></root>'; 
  29. $xml = new DOMDocument(); 
  30. $xml->loadXML($xmlData); 
  31. $array = domToArray($xml->documentElement); 
  32. print_r($array); 
  33. function domToArray($node) { 
  34.     $array = array(); 
  35.  
  36.     if ($node->hasAttributes()) { 
  37.         foreach ($node->attributes as $attr) { 
  38.             $array[$attr->nodeName] = $attr->nodeValue; 
  39.         } 
  40.     } 
  41.  
  42.     if ($node->hasChildNodes()) { 
  43.         foreach ($node->childNodes as $childNode) { 
  44.             if ($childNode->nodeType == XML_ELEMENT_NODE) { 
  45.                 $array[$childNode->nodeName] = domToArray($childNode); 
  46.             } else if ($childNode->nodeType == XML_TEXT_NODE) { 
  47.                 $array['value'] = $childNode->nodeValue; 
  48.             } 
  49.         } 
  50.     } 
  51.  
  52.     return $array; 
  53. } 

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

方法三:

  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数据转数组

分享到: