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

 更新时间:2023年11月24日 09:49:15   作者:PHP隔壁老王邻居  
这篇文章主要为大家详细介绍了php实现xml数据转数组两种方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以参考下

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

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

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

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

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

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

$xmlData = '<root><name>John Doe</name><age>30</age></root>';
$xml = new DOMDocument();
$xml->loadXML($xmlData);
$array = domToArray($xml->documentElement);
print_r($array);
function domToArray($node) {
    $array = array();
 
    if ($node->hasAttributes()) {
        foreach ($node->attributes as $attr) {
            $array[$attr->nodeName] = $attr->nodeValue;
        }
    }
 
    if ($node->hasChildNodes()) {
        foreach ($node->childNodes as $childNode) {
            if ($childNode->nodeType == XML_ELEMENT_NODE) {
                $array[$childNode->nodeName] = domToArray($childNode);
            } else if ($childNode->nodeType == XML_TEXT_NODE) {
                $array['value'] = $childNode->nodeValue;
            }
        }
    }
 
    return $array;
}

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

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

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

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

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

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

方法补充

方法一:

function xmlToArray(string $xml, $oldStr = [], $newStr = [])
    {
        //过滤特殊xml 格式
        if (!empty($oldStr)) {
            $xml = str_replace($oldStr, $newStr, $xml);
        }
        $objectXml = simplexml_load_string($xml);//将文件转换成对象
        $xmlJson = json_encode($objectXml);//将对象转换个JSON
        $xmlArray = json_decode($xmlJson, true);//将json转换成数组
        return $xmlArray;
    }

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

//数组转xml
function ArrToXml($arr)
{
	if(!is_array($arr) || count($arr) == 0) return '';
	
	$xml = "<xml>";
	foreach ($arr as $key=>$val)
	{
		if (is_numeric($val)){
			$xml.="<".$key.">".$val."</".$key.">";
		}else{
			$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
		}
	}
	$xml.="</xml>";
	return $xml; 
}
	
//Xml转数组
function XmlToArr($xml)
{	
	if($xml == '') return '';
	libxml_disable_entity_loader(true);
	$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);		
	return $arr;
}

方法三:

//获取xml xml转数组
    private function xmlToarr($xml)
    {
        if (!$xml) {
            throw new WxPayException("xml数据异常!");
        }
        //将XML转为array
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $data;
    }

到此这篇关于php实现xml数据转数组两种方式的文章就介绍到这了,更多相关php xml转数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 比较discuz和ecshop的截取字符串函数php版

    比较discuz和ecshop的截取字符串函数php版

    网上看到一篇文章 discuz和ecshop截取字符串的两个函数,比较了一下两个版本的函数,都各有局限,只能在特定的前提下使用,但是学习一下有利于拓宽思路,了解PHP的扩展功能
    2012-09-09
  • 简单的过滤字符串中的HTML标记

    简单的过滤字符串中的HTML标记

    简单的过滤字符串中的HTML标记...
    2006-12-12
  • PHP中实现中文字符进制转换原理分析

    PHP中实现中文字符进制转换原理分析

    中文字符编码研究系列第四期,PHP实现中文字符进制转换原理分析,主要讨论中文汉字转换为十进制和十六进制的方法,并掌握转换原理应用于实际开发。本文以GBK编码字符为例,讨论GBK编码的字符转换原理
    2011-12-12
  • PHP unset函数原理及使用方法解析

    PHP unset函数原理及使用方法解析

    这篇文章主要介绍了PHP unset函数原理及使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Smarty foreach控制循环次数的实现详解

    Smarty foreach控制循环次数的实现详解

    在smarty中数组是经常会用到的,循环遍历数组用 section 或者 foreach ,如何得到数组长度或者判断一个数组个数呢
    2013-07-07
  • php文件上传、下载和删除示例

    php文件上传、下载和删除示例

    这篇文章主要为大家详细介绍了php文件上传、下载和删除示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • PHP大批量数据操作时临时调整内存与执行时间的方法

    PHP大批量数据操作时临时调整内存与执行时间的方法

    PHP大批量数据操作时临时调整内存与执行时间的方法 ,因为运行的程序会很大很慢所以需要临时设置下。不用修改php.ini参数了。
    2011-04-04
  • php 操作excel文件的方法小结

    php 操作excel文件的方法小结

    用php生成excel文件的方法,单独就是用的php,注意一下数据的输入方法即可。
    2009-12-12
  • PHP反射机制用法实例

    PHP反射机制用法实例

    这篇文章主要介绍了PHP反射机制用法,是PHP程序设计中比较重要的概念,需要的朋友可以参考下
    2014-08-08
  • PHP生成和获取XML格式数据的方法

    PHP生成和获取XML格式数据的方法

    这篇文章主要介绍了PHP生成和获取XML格式数据的方法,结合实例形式较为详细的分析了PHP操作数据库生成XML及获取XML格式数据的相关技巧,需要的朋友可以参考下
    2016-03-03

最新评论