2011-06-21 13 views
0

xmlスクリプトをPHPの連想配列に変換したいと考えています。xmlを配列に変換し、ノード内のノードを処理できません

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

と私は配列に変換するために書いたコードが

Array 
(
    [Peter] => 



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

として出力を与える

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

ある問題は、私はできないのですということです:XMLスクリプトがあります子どもの子供たち(この例ではピーターの子供たち)を再帰的に横切る条件を理解する。これらのノードも考慮するためにこのコードを変更するにはどうしたらいいですか?

+0

あなたは魔法の言葉を再帰的に言った。再帰。あなたのメソッドchildren()の現在の使用法では、再帰関数を適用してドリルダウンし、必要な値を取得する必要があります。それは、XML全体を必要に応じて配列または配列の配列に変換する別の方法があるかどうかを調査する必要があります。 – FinalForm

+1

このページの2つの例を参照してください:http://php.net/manual/en/class.simplexmliterator.php、どちらも必要なものを行います。 – Zyava

+0

@ Zyavaありがとう、それは助けた – rkt

答えて

0

1つのレベルを解析し、現在のレベル内のノードを検出したときに関数を呼び出す関数を作成する必要があります。それはかなり複雑で、乱雑になることがあります。好奇心のために、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つのレベルの深さである場合にのみ動作します。

関連する問題