我有这个XML文件:
<xml>
<element>
<name>A</name>
<property no="1" value="OK" />
<property no="2" value="NO" />
<property no="3" value="OK" />
</element>
<element>
<name>B</name>
<property no="1" value="NO" />
<property no="2" value="NO" />
<property no="3" value="OK" />
<property no="4" value="OK" />
</element>
<element>
<name>C</name>
<property no="1" value="NO" />
<property no="2" value="NO" />
</element>
</xml>
我需要所有具有“值” =“ OK”的“属性”节点的元素,但是我想要
整个树,只有匹配的节点。
我只设法拥有一件事或另一件事,而不是两者都有。
因此,我可以拥有具有value = OK属性节点的整个元素树:
//element[property/@value="OK"]
给我:
<element>
<name>A</name>
<property no="1" value="OK"/>
<property no="2" value="NO"/>
<property no="3" value="OK"/>
</element>
<element>
<name>B</name>
<property no="1" value="NO"/>
<property no="2" value="NO"/>
<property no="3" value="OK"/>
<property no="4" value="OK"/>
</element>
或者我可以将所有属性的值都设置为“ OK”:
//element/property[@value="OK"]
这给了我:
<property no="1" value="OK"/>
<property no="3" value="OK"/>
<property no="3" value="OK"/>
<property no="4" value="OK"/>
不过,这是我需要的:
<element>
<name>A</name>
<property no="1" value="OK" />
<property no="3" value="OK" />
</element>
<element>
<name>B</name>
<property no="3" value="OK" />
<property no="4" value="OK" />
</element>
最佳答案
我需要所有具有“值” =“ OK”的“属性”节点的元素,但是我
想要整棵树,只想要匹配的节点。
我只设法拥有一件事或另一件事,而不是两者都有。
无法同时获得两个结果的原因是,您试图通过XPath做太多事情。
XPath供选择;您正在尝试进行施工。
要构建或重建通过XPath选择的节点,必须使用托管语言(XSLT,Python,Java等)的功能。 XPath本身是错误的工具,无法重新排列已选择的工具。
关于xml - 选择完整的树并仅选择某些子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207604/