2013-11-25 46 views
0

其內容元素的名稱考慮一個簡單的XML模式:列表XML孩子不使用XPATH

<products> 
    <category name="furniture"> 
     <item name="chair"> 
      <size> 
       <small>10</small> 
       ...and many more 
       <large>20</large> 
      </size> 
     </item> 
    </category> 
</products> 

我期待列出的<size>子元素,而無需使用XPATH他們的實際內容。

$xml=simple_load_file('file.xml'); 

foreach ($xml->xpath("products/category[@=name'furniture']/item[@name='chair]/size") as $size) 
    echo $size->????? . '<br>'; 

$size->children();實際文本輸出這樣:

10 
20 

我在尋找以下的輸出:

small 
...rest of elements 
large 

回答

0

你對你有一些錯誤XPath表達式。第一個=位置錯誤,椅子字符串缺少結束引用。添加/*您可以直接選擇大小的子節點。

/products/category[@name='furniture']/item[@name='chair']/size/* 

使用的DOMDocument完整的源:

$xml = <<<'XML' 
    <products> 
    <category name="furniture"> 
     <item name="chair"> 
      <size> 
       <small>10</small> 
       <large>20</large> 
      </size> 
     </item> 
    </category> 
    </products> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXPath($dom); 

$nodes = $xpath->evaluate("/products/category[@name='furniture']/item[@name='chair']/size/*"); 

foreach ($nodes as $node) { 
    echo $node->localName, "\n"; 
}