php怎么把xml转成数组
-
PHP 提供了多种方法将 XML 文件转换为数组形式。下面介绍两种常见的方法供参考。
方法一:使用 SimpleXML 拓展
SimpleXML 是 PHP 内置的一个拓展模块,可用于解析和操作 XML。可以通过 SimpleXML 的 `simplexml_load_string()` 或 `simplexml_load_file()` 函数将 XML 数据加载为 SimpleXML 对象,再通过强制类型转换将其转换为数组。示例代码如下:
“`php
$xmlString = ‘ ‘;
Apple 10
Orange 5 $xml = simplexml_load_string($xmlString);
$json = json_encode($xml);
$array = json_decode($json, true);print_r($array);
“`方法二:使用 DOMDocument 类
DOMDocument 类也是 PHP 内置的一个类,可用于加载和解析 XML。使用 DOMDocument 类的 `load()` 或 `loadXML()` 方法加载 XML 数据,然后使用 DOMXpath 类和 XPath 表达式选择节点,再将节点的数据转换为数组。示例代码如下:
“`php
$xmlString = ‘ ‘;
Apple 10
Orange 5 $dom = new DOMDocument();
$dom->loadXML($xmlString);
$xpath = new DOMXpath($dom);$items = $xpath->query(‘//item’);
$array = [];foreach ($items as $item) {
$name = $xpath->query(‘.//name’, $item)->item(0)->nodeValue;
$price = $xpath->query(‘.//price’, $item)->item(0)->nodeValue;
$array[] = [
‘name’ => $name,
‘price’ => $price
];
}print_r($array);
“`以上是两种常见的将 XML 转换为数组的方法,根据实际需要选择适合的方法。
2年前 -
在PHP中,将XML转换为数组有多种方法。下面是几种常见的方法:
1. 使用SimpleXML库:SimpleXML是PHP的一个扩展库,可以简化XML解析和处理。使用SimpleXML可以将XML文件加载为一个对象,然后通过对象的属性和方法访问XML数据。要将SimpleXML对象转换为数组,可以使用`json_encode()`和`json_decode()`函数。以下是示例代码:
“`php
$xml = simplexml_load_file(‘data.xml’);
$json = json_encode($xml);
$array = json_decode($json, true);
“`2. 使用DOM库:DOM(Document Object Model)是一种用于处理和操作XML文档的标准接口。PHP提供了DOM库来操作XML。可以使用`DOMDocument`类来加载XML文件,并使用`getElementsByTagName()`和其他方法来获取节点和属性。然后可以遍历DOM节点并将其转换为数组。以下是示例代码:
“`php
$dom = new DOMDocument();
$dom->load(‘data.xml’);
$array = domnode_to_array($dom->documentElement);function domnode_to_array($node){
$array = array();
if($node->hasAttributes()){
foreach($node->attributes as $attr){
$array[$attr->nodeName] = $attr->nodeValue;
}
}
if($node->hasChildNodes()){
if($node->childNodes->length == 1){
$array[$node->firstChild->nodeName] = domnode_to_array($node->firstChild);
}else{
foreach($node->childNodes as $childNode){
if($childNode->nodeType != XML_TEXT_NODE){
$array[$childNode->nodeName][] = domnode_to_array($childNode);
}
}
}
}else{
$array = $node->nodeValue;
}
return $array;
}
“`3. 使用SimpleXMLElement类:SimpleXMLElement是PHP内置的用于解析XML的类。可以使用`SimpleXMLElement`类来加载XML文件,然后通过遍历节点和属性的方式将XML数据转换为数组。以下是示例代码:
“`php
$xml = simplexml_load_file(‘data.xml’);
$array = xml2array($xml);function xml2array($xml){
$array = array();
foreach($xml as $element) {
$tag = $element->getName();
$value = (string)$element;
if ($element->count() > 0) {
$array[$tag][] = xml2array($element);
} else {
$array[$tag] = $value;
}
}
return $array;
}
“`4. 使用XML解析器:另一种方法是使用PHP的XML解析器来解析XML文件,并将其转换为数组。可以使用`xml_parser_create()`函数创建解析器,然后使用`xml_parse_into_struct()`函数将XML解析为结构化的数组。以下是示例代码:
“`php
$xmlString = file_get_contents(‘data.xml’);$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $xmlString, $xmlArray);
xml_parser_free($parser);$array = xml_struct_to_array($xmlArray);
function xml_struct_to_array($xmlArray){
$array = array();
$size = count($xmlArray);
for($i = 0; $i < $size; $i++){ $tag = $xmlArray[$i]['tag']; $value = (array_key_exists('value', $xmlArray[$i])) ? $xmlArray[$i]['value'] : ''; if(array_key_exists($tag, $array)){ if(!array_key_exists(0, $array[$tag])){ $temp = $array[$tag]; $array[$tag] = array(); $array[$tag][] = $temp; } $array[$tag][] = xml_struct_to_array($xmlArray[$i]['attributes']); }else{ $array[$tag] = xml_struct_to_array($xmlArray[$i]['attributes']); } } return $array;}```这些是将XML转换为数组的一些常见方法。根据你的需求选择其中一种方法来完成这个任务。2年前 -
将XML转换为数组的方法有多种,以下是其中一种常用的方法:
1. 使用SimpleXMLElement类:SimpleXMLElement类是PHP中用于解析和操作XML的扩展类。您可以使用这个类将XML数据转换为对象或数组。
下面是一个将XML转换为数组的示例代码:
“`
$xmlString = file_get_contents(‘data.xml’);
$xml = simplexml_load_string($xmlString);
$json = json_encode($xml);
$array = json_decode($json, true);
“`
– 首先,使用file_get_contents()函数从文件中读取XML数据,并将其赋值给变量$xmlString。
– 接下来,使用simplexml_load_string()函数将XML字符串解析为SimpleXMLElement对象,并将其赋值给变量$xml。
– 使用json_encode()函数将SimpleXMLElement对象转换为JSON字符串,并将其赋值给变量$json。
– 最后,使用json_decode()函数将JSON字符串解码为关联数组,并将其赋值给变量$array。现在,您可以使用$array变量来访问和操作XML数据了。
2. 使用DOMDocument类:DOMDocument类也是PHP中用于解析和操作XML的扩展类。您可以使用这个类将XML数据转换为DOM对象,然后使用DOM对象的方法访问和操作XML数据。
下面是一个将XML转换为数组的示例代码:
“`
$xmlString = file_get_contents(‘data.xml’);
$dom = new DOMDocument();
$dom->loadXML($xmlString);
$array = xmlToArray($dom->documentElement);function xmlToArray($node) {
$array = [];
if ($node->hasAttributes()) {
foreach ($node->attributes as $attribute) {
$array[$attribute->nodeName] = $attribute->nodeValue;
}
}
if ($node->hasChildNodes()) {
foreach ($node->childNodes as $childNode) {
if ($childNode->nodeType == XML_ELEMENT_NODE) {
$array[$childNode->nodeName] = xmlToArray($childNode);
}
}
}
return $array;
}
“`
– 首先,使用file_get_contents()函数从文件中读取XML数据,并将其赋值给变量$xmlString。
– 然后,创建一个DOMDocument对象,并使用loadXML()方法将XML字符串加载到DOM对象中。
– 接下来,定义一个名为xmlToArray()的递归函数,该函数将递归遍历XML节点,并将其转换为数组。
– 在xmlToArray()函数中,首先创建一个空数组$array来存储节点的属性和子节点。
– 然后,使用foreach循环遍历节点的属性,并将属性名和属性值存储到数组$array中。
– 接着,使用foreach循环遍历节点的子节点,并递归调用xmlToArray()函数将子节点转换为数组,并将其存储到数组$array中。
– 最后,返回数组$array。现在,您可以使用$array变量来访问和操作XML数据了。
以上是将XML转换为数组的两种常见方法。根据您的具体需求,您可以选择适合您的方法来实现。
2年前