2017-03-21 27 views
0

我有一個關於在PHP中使用DomDocument處理XML文件的問題。在XML中搜索某些父項的子項

<managedObject class="class1" version="version1" distName="distName1" id="id1"> 
    <p name="a">Some data</p> 
    <p name="b">Some data</p> 
    <p name="c">Some data</p> 
    <p name="d">Data I need</p> 
    <p name="e">Some data</p> 
</managedObject> 

<managedObject class="class2" version="version2" distName="distName2" id="id2"> 
    <p name="a">Some data</p> 
    <p name="b">Some data</p> 
    <p name="c">Some data</p> 
    <p name="d">Some data</p> 
    <p name="e">Some data</p> 
</managedObject> 

例如,我需要從名爲「d」,但該元素獲取數據,只有當它的父已階級=「1類」,版本=「VERSION1」等

到目前爲止,我嘗試過:

$nodes = $finder->query("//*[contains(@distName, 'distName1')][contains(@class, 'class1')][contains(@version, 'version1')]/[contains(@name, 'd')]"); 
foreach ($nodes as $node) { 
    echo " {$node->nodeValue}\n"; 
} 

但它不起作用。

任何幫助,將不勝感激。

回答

0

你想要查找那個[contains(@name, 'd')]?一切:

$nodes = $finder->query("//*[contains(@distName, 'distName1')][contains(@class, 'class1')][contains(@version, 'version1')]/*[contains(@name, 'd')]"); 
// ------------------------------------------------------------------------------------------------------------------------^ use `*` for any item 

只是p

$nodes = $finder->query("//*[contains(@distName, 'distName1')][contains(@class, 'class1')][contains(@version, 'version1')]/p[contains(@name, 'd')]"); 
// ------------------------------------------------------------------------------------------------------------------------^ use `p` for `p` items only