插件窝 干货文章 php实现xml数据转数组两种方式

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

XML 数组 json gt 172    来源:    2024-10-11

方法一、可以使用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转数组内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!