2011-06-21 42 views
0

我想将xml脚本转换为PHP中的关联数组。 XML脚本是:将xml转换为数组,无法处理节点内的节点

<ages> 
    <Peter> 
     <Peterchild>4</Peterchild> 
     <Peterchild>6</Peterchild> 
    </Peter> 
    <Quagmire>30</Quagmire> 
    <Joe>34</Joe> 
</ages> 

,我写了它转换成一个数组的代码是

${$xml->getName()} = array(); 
foreach($xml->children() as $child){ 
    $ages[$child->getName()] = (string)$child; 
} 

这给输出

Array 
(
    [Peter] => 



    [Quagmire] => 30 
    [Joe] => 34 
) 

的问题是,我不能找出递归遍历儿童子女的一个条件(在这个例子中是彼得的子女)。如何更改此代码以考虑这些节点?

+0

你说的魔术字,递归....递归。随着您的方法children()的当前使用,您需要应用递归函数来深入挖掘并获取所需的值。或者你应该调查是否有另一种方法只需要将整个xml转换为数组或数组数组。 – FinalForm

+1

请参阅本页上的2个示例:http://php.net/manual/en/class.simplexmliterator.php,都做你所需要的。 – Zyava

+0

@Zyava谢谢,它帮助 – rkt

回答

0

您需要创建一个解析一个级别的函数,然后在该函数找到当前级别内的节点时调用它自己。这非常复杂,可能会变得混乱。出于好奇,当你可以使用SimpleXML对象以对象格式访问所需的所有信息时,为什么要这样做呢?

0
${$xml->getName()} = array(); 
    foreach($xml->children() as $child) 
    { 
     if (count($child->children() > 0) 
     { 
     foreach ($child->children as $childnode) 
     { 
      $ages[$childnode->getName()] = (string)$childnode; 
     } 
     } 
     else { 
      $ages[$child->getName()] = (string)$child; 
     } 
    } 

这如果是1级深只会工作,如果它要更加的水平,你应该写一个函数,通过它逐级这种意愿周期。

相关问题