在PHP中使用DOMDOcument解析XML并返回树结构数组

在PHP中使用DOMDOcument解析XML并返回树结构数组,php,domdocument,Php,Domdocument,我很抱歉,如果我的问题没有意义,因为这是我的第一个问题,但是我已经阅读了一段时间张贴的问题 对,我有一个XML结构 <category> <id>123456</id> <name>Sales</name> <categories> <category> <id>2345</id> <name>UK House prices</name>

我很抱歉,如果我的问题没有意义,因为这是我的第一个问题,但是我已经阅读了一段时间张贴的问题

对,我有一个XML结构

<category>
  <id>123456</id>
  <name>Sales</name>
<categories>
  <category>
    <id>2345</id>
    <name>UK House prices</name>
  </category>
  <category>
    <id>3456</id>
    <name>Property Market Surveys</name>
  </category>
</categories>
然后,我必须能够提取数组的数据,并将其插入到具有父子关系的表中

如果您需要更多信息来完成此问题,请告诉我

非常感谢您抽出时间


问候。

你为什么需要它?如果您想以简单的方式访问XML树(与数组类似,除了数组表示法仅在存在具有相同元素名称的同级时使用,否则使用属性表示法),您可以使用。

如果您使用谷歌搜索,您将获得大量良好的相关结果,此函数似乎可以工作。 这是一个很好的起点:(来源于)

只需将XML指定为参数,它将返回一个数组:

function xml2array($xml,$recursive = false) {

 if (!$recursive ) { $array = simplexml_load_string ($xml); }
 else { $array = $xml ; }

 $newArray = array();
 $array = $array ;

 foreach ($array as $key => $value) {
     $value = (array) $value;

     if (isset($value[0])) { $newArray[$key] = trim($value[0]); }
     else { $newArray[$key][] = XML2Array($value,true) ; }
 }

 return $newArray;
}

使用更好的节点索引(按名称)重写上一个解决方案并减少参数数量:

function xml2Array( $xml )
{
    $xml = ( array )( is_string( $xml ) ? simplexml_load_string( $xml ) : $xml ) ;

    $parse = array() ;
    foreach( $xml as $key => $value )
    {
        $parse[$key] = is_string( $value ) 
            ? trim( $value ) 
            : $this->xml2Array( $value )
        ;
    }

    return $parse ;
}

嘿,很抱歉回复太晚了……但你是对的,我确实设法使用了simplexml,并创建了一个类似于下面Chief17所示的函数。我已经设法按照我想要的方式将xml转换成数组……我将尝试使用该数组将数据插入表中,并且在同一个表中具有父子关系。让我看看这是怎么回事,无论如何,非常感谢你们的时间和努力……你们真是太棒了……您好,非常感谢你们的时间,我已经成功地创建了一个类似于此的函数,但我想要它的方式。到目前为止,我已经得到了我想要的……让我们看看剩下的事情进展如何。干杯,伙计。
function xml2Array( $xml )
{
    $xml = ( array )( is_string( $xml ) ? simplexml_load_string( $xml ) : $xml ) ;

    $parse = array() ;
    foreach( $xml as $key => $value )
    {
        $parse[$key] = is_string( $value ) 
            ? trim( $value ) 
            : $this->xml2Array( $value )
        ;
    }

    return $parse ;
}