2

simpleXMLforeach "categories" -> すべての "subCategories1" ノード (各 "categories" の最初のノードだけでなく) を解析することは可能ですか?

: subcategories1 に移動した後、subcategories2 に移動した後、subcategories3 に移動し、subcategories2->subcategories3 に戻ります。これ以上 subcategories2 がない場合は、subcategories1 に移動し、このカテゴリ ノードに subcategories1 がない場合は、次のノードに移動します。

<xml>
<categories>
    <tag11>value</tag11>
    <tag12>value</tag12>
    <subCategories1> 
        <tag21>value</tag21>
        <tag22>value</tag22>
        <subCategories2>
            <!-- ........ -->
            <tag31>....</tag31>
        </subCategories2>
    </subCategories1>
</categories>

<categories>
    <subCategories1> 
        <!-- ............... -->
    </subCategories1> 
    <subCategories1> 
        <!-- ............... -->
    </subCategories1> 
</categories>

<!-- ....... -->

<categories>
    <!-- ............ -->
</categories>

</xml>
foreach($xml->Categories as $categories){
   foreach ($categories->SubCategories1 as $cat => $value){ 
       //this took only the first SubCategories1 node from all Categories tag...
   }
}

ps 私の英語は少し錆びています. 明確にするために、最初の「categories」タグに移動する必要があります.ここでは「subcategory1」に移動します.存在する場合..存在しない場合は「subcategory1」の別のレベルに移動します。存在する場合は同じルーチンを実行します。そうでない場合は、次の「categories」タグに進みます。

4

1 に答える 1

0

私はDOMxmlで答えを見つけました:)

$xml = new DOMDocument();
$xml->load($destinationFile);
$categories = $xml->getElementsByTagName("Categories");
foreach( $categories as $category ){
    //..............
    foreach( $category->getElementsByTagName("SubCategories1") as $subcategory1 ){
        //...............
        foreach( $subcategory1->getElementsByTagName("SubCategories2") as $subcategory2 ){
            //............
            foreach( $subcategory2->getElementsByTagName("SubCategories3") as $subcategory3 ){
                ......
            }
        }
    }

}
于 2013-03-15T11:32:09.680 に答える