2010-01-25 182 views
1

使用simplexml,是否有可能根據父節點的屬性獲取節點的子節點。例如,我想在myItem1變體列表(輸出將是小的,大的)使用simplexml按屬性獲取節點(及其子節點)

這裏是什麼,我以後是一些僞代碼:

foreach($xml->xpath('//family[@name="myItem1"]')->variants->children() as $child) { 
    $child->getName() 
} 

(當然這並未「T工作,但希望它描述了我想要做的)

示例XML:

<library> 
<family name="myItem1"> 
    <variants> 
    <small> 
    ... 
    </small> 
    <large> 
    ... 
    </large>  
    </variants> 
</family> 
<family name="myItem2"> 
    <variants> 
    <small> 
    ... 
    </small> 
    <medium> 
    ... 
    </medium> 
    </variants> 
</family> 
</library> 

謝謝。

+0

這並不能真正說明你想要什麼實現。請發佈一個示例XML文檔和幾個「變體」的例子。 – 2010-01-25 02:26:56

+0

對不起,我沒有正確格式化我的帖子。現在正在顯示。 – 2010-01-25 02:33:14

+0

[SimpleXML:選擇具有某個屬性值的元素]的可能重複(http://stackoverflow.com/questions/992450/simplexml-selecting-elements-which-have-a-certain-attribute-value) – hakre 2013-10-26 19:51:58

回答

1

如果我理解正確,你想獲得給定節點的所有孩子的名字。有各種不同的方式做到這一點,其中之一是遍歷所有的孩子,像這樣:

foreach ($xml->xpath('//family[@name="myItem1"]') as $family) 
{ 
    $variants = array(); 
    foreach ($family->variants->children() as $name => $node) 
    { 
     $variants[] = $name; 
    } 

    // in case there are duplicates you can do 
    $variants = array_unique($variants); 

    var_dump($variants); 
} 
+0

謝謝。它完美的作品。 – 2010-01-25 14:04:03

0

請嘗試以下XPath表達式:

//family[@name="myItem1"]/variants/* 
相關問題