преобразование XML в массив, не может обрабатывать узел внутри узла - PullRequest
0 голосов
/ 22 июня 2011

Я хочу преобразовать XML-скрипт в ассоциативный массив на PHP. Сценарий 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
)

Проблема в том, что я не могу понять условие рекурсивного прохождения через детей детей (детей Петра в этом примере). Как мне изменить этот код, чтобы учесть и эти узлы?

Ответы [ 2 ]

0 голосов
/ 22 июня 2011
${$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 уровень, если он будет иметь больше уровней, вы должны написать функцию, которая будет циклически проходить по ней уровень за уровнем.

0 голосов
/ 22 июня 2011

Вам нужно будет создать функцию, которая анализирует один уровень, а затем вызвать саму функцию, когда она найдет узел внутри текущего уровня.Это довольно сложно и может запутаться.Из любопытства, зачем вам это делать, если вы можете получить доступ ко всей необходимой информации в формате объекта с помощью объекта SimpleXML?

...