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

在XPath中比较同一节点属性值与子元素值的技术咨询

解决Grid节点下属性与子元素值比较的XPath需求

没问题,我来帮你搞定这个XPath的需求~先把你的XML示例清晰列出来,方便咱们对照分析:

<Grid> 
  <GridRow ItemValue="10" ItemType="A"> 
    <YS_P_Name>L2</YS_P_Name> 
    <YS_P_BK>10</YS_P_BK> 
  </GridRow> 
  <GridRow ItemValue="10" ItemType="A"> 
    <YS_P_Name>L3</YS_P_Name> 
    <YS_P_BK>20</YS_P_BK> 
  </GridRow> 
  <GridRow ItemValue="30" ItemType="B"> 
    <YS_P_Name>L1</YS_P_Name> 
    <YS_P_BK>40</YS_P_BK> 
  </GridRow> 
</Grid>

你需要的是筛选出Grid下所有满足自身属性值与子元素值比较条件的GridRow节点,下面分常见的比较场景给出对应的XPath表达式:

1. 属性值等于子元素文本值

如果要找ItemValue属性值和子元素YS_P_BK的文本值相等的GridRow,表达式如下:

/Grid/GridRow[@ItemValue = YS_P_BK/text()]

解释:

  • /Grid/GridRow:定位到根节点Grid下的所有GridRow子节点;
  • [@ItemValue = YS_P_BK/text()]:过滤条件,比较当前GridRow节点的ItemValue属性值,和它的子元素YS_P_BK的文本内容是否相等。
    在你的示例中,第一个GridRow会被选中(两者都是10)。

2. 属性值大于/小于子元素文本值

如果需要比较大小,直接替换运算符即可:

  • 找ItemValue小于YS_P_BK值的节点:
    /Grid/GridRow[@ItemValue < YS_P_BK/text()]
    
    注意:在XML相关的工具(比如XSLT)中,<需要转义为&lt;,所以表达式要写成:
    /Grid/GridRow[@ItemValue &lt; YS_P_BK/text()]
    
  • 找ItemValue大于YS_P_BK值的节点:
    /Grid/GridRow[@ItemValue > YS_P_BK/text()]
    

在你的示例中,第二、第三个GridRow会被选中(10<20,30<40)。

3. 处理子元素的空白字符

如果YS_P_BK的文本可能包含多余的空白(比如换行、空格),可以用normalize-space()消除影响,比如:

/Grid/GridRow[@ItemValue = normalize-space(YS_P_BK/text())]

这个函数会去除文本首尾的空白,并把中间的连续空白替换成单个空格,避免空白导致的比较错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:32:44