php实现xml数据转数组两种方式
发布:smiling 来源: PHP粉丝网 添加日期:2024-03-08 17:41:48 浏览: 评论:0
这篇文章主要为大家详细介绍了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;
- }
- $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 (!emptyempty($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;
- }
Tags: xml数据转数组
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)