xml - 选择完整的树并仅选择某些子元素

标签 xml xpath

我有这个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/

相关文章:

android - 在 BottomNavigationView 中选择时如何为每个项目使用不同的颜色?

c# - 如何在 C# 中渐进加载 XML?

xml - 在 Apache Solr 中索引 XML 文件

c# - 是否有任何工具可以从 xml 自动生成 C# 类?

html - 使用 R 和 XPath,如何从结果中删除格式元素,例如\n 和\t?

用于选择给定节点中的所有文本及其子节点的文本的 XPath 表达式

python - Selenium:当文本多次出现时如何定位精确的文本匹配

xml - 在哪里可以找到有关 Microsoft Dynamics CRM API 的 SOAP/XML 查询的信息

xml - Xpath 1.0 表达式获取任何请求的值

xml - XSLT:检查元素是否较早遍历