我有一个关于在PHP中使用DomDocument处理XML文件的问题。
<managedObject class="class1" version="version1" distName="distName1" id="id1">
<p name="a">Data I have</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>
只知道“a”元素,我可以得到“d”元素,但是只有父元素有某个类和版本吗?
到目前为止,我已经尝试过几次,最近的一次是:
$nodes = $finder->query("//*[contains(@class, 'class1')][contains(@version, 'version1')]/*[contains(@name, 'a')]");
foreach ($nodes as $node) {
$Array[$i] = $node;
}
我用它来查看节点的至少一些属性,但它不返回任何内容。
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果您可以在Data I have
工作并返回工作,//p[@name="d" and ../p[@name="a"]/text() = "Data I have" and parent::*[@version="version1"]]
的X路应该可以为您提供所需的
否则可以使用//p[@name="d" and ../p[@name="a"] and parent::*[@version="version1"]]
答案 1 :(得分:0)
您可以使用以下xpath
找到<p name="d">Data I need</p>
//managedobject[@class='class1'][@version='version1']/p[@name='a']/following-sibling::p[@name='d']
//managedobject[@class='class1'][@version='version1']/p[@name='a']
将使用特定的类和版本以及a
元素
/following-sibling::p[@name='d']
将找到d
a
元素