You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于子元素属性值使用XPath筛选指定Object元素

正确筛选符合条件的XML元素的XPath表达式

给定XML结构

<A>
    <Lot>
        <Of>
            <Various>
                <Parents>
                    <Object NodeType="UsageType">
                        <Property Name="Descriptor" Value="A" Type="My.DescriptorType"/>
                        [...]
                    </Object>
                    <Object NodeType="UsageType">
                        <Property Name="Descriptor" Value="B" Type="My.DescriptorType"/>
                        [...]
                    </Object>
                    <Object NodeType="UsageType">
                        <Property Name="Descriptor" Value="C" Type="My.DescriptorType"/>
                        [...]
                    </Object>
                </Parents>
            </Various>
        </Of>
    </Lot>
</A>

筛选需求

  • 目标元素为Object,且其NodeType属性值为UsageType
  • 该Object包含一个子Property元素,需同时满足Name="Descriptor"且Value="B"

原表达式问题

你尝试的表达式:

//Object[@NodeType='UsageType' and Property@Name='Descriptor' and Property@Value='B']

存在两个问题:

  1. 语法错误:Property@Name缺少括号,正确写法应为Property[@Name]
  2. 逻辑问题:两个Property条件是分别检查是否存在任意一个Property满足对应属性,无法确保是同一个Property元素同时具备两个属性。

正确的XPath表达式

方案1:直接限定同一个子元素谓词

这是最简洁通用的写法,把两个属性条件放到同一个Property的谓词中,确保匹配的是同一个子元素:

//Object[@NodeType='UsageType' and Property[@Name='Descriptor' and @Value='B']]

方案2:反向查找父元素

如果需要更明确的层级控制,可以先找到符合条件的Property,再回溯到它的父Object:

//Object[@NodeType='UsageType']/Property[@Name='Descriptor' and @Value='B']/..

以上两种表达式都会精准匹配到XML中第二个Object元素,也就是包含目标Property的节点。

内容的提问来源于stack exchange,提问作者J4N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:22:44