2013-03-13 44 views
1

有可能與simpleXML解析foreach「類別」 - >所有「subCategories1」節點(不僅是每個「類別」的第一個)?php簡單的xml短語多級標籤

:需要去subcategories1在subcategories3後subcategories2後,回來在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... 
    } 
} 

附:我的英語有點生疏。要清楚我需要進入第一個「類別」標籤,這裏進入「subcategory1」這裏「subcategory2」這裏所有的「subcategoory3」返回一個級別在下一個「subcategory2」if存在..如果不存在「子類別1」中的另一個級別,如果存在相同的rutine,則轉到下一個「categories」標記。

+0

那些是子類元素真的編號? – hakre 2013-03-13 12:26:38

+0

您在末尾發佈的'foreach'循環應該可以正常工作 - 外層循環會爲您提供XML文檔中的每個''元素,並且內部循環將爲您提供每個元素中的每個元素。 – IMSoP 2013-03-13 20:06:11

+0

for hakre -yes;對於IMSoP:內部的foreach將只採用所有「類別」節點中的第一個子類別1 ...問題是每個「類別」節點具有不同數量的子類別1個節點。我不認爲有可能用簡單的XML來解決這個問題..也許用DOMxml? – 2013-03-15 10:31:19

回答

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){ 
       ...... 
      } 
     } 
    } 

} 
+0

你的foreach($ category-> getElementsByTagName(「SubCategories1」)爲$ subcategory1 )'如果你使用了SimpleXML,'會和'foreach($ category-> SubCategories1 as $ subcategory1)完全一樣「。 – IMSoP 2013-03-16 16:29:22