php怎么把xml转成数组

不及物动词 其他 165

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    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年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在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年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    将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年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部