我有一个关于在PHP中使用DomDocument处理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'的元素中获取数据,但前提是它的父元素具有class =“class1”,version =“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 :(得分: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