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

如何在XPath 1版本中测试(孙)子节点值是否相等?

判断XPath 1.0中director与presenter节点值是否相等的实现

嘿,这个需求在XPath 1.0里其实挺直接的,我给你一步步拆解清楚怎么实现:

核心表达式(筛选符合条件的Cinema节点)

如果你想直接选出director和presenter值相等的<Cinema>节点,用这个表达式就可以:

/Cinema[directors/director = crew/presenter]

它的逻辑很简单:遍历根节点下所有<Cinema>元素,只保留那些内部directors/director节点的字符串值和crew/presenter节点字符串值完全匹配的节点。

直接返回布尔值(明确判断是否相等)

要是你只需要一个true()或false()的结果来确认两者是否相等,就用boolean()函数包装一下表达式:

boolean(/Cinema/directors/director = /Cinema/crew/presenter)

这个写法会直接输出布尔值,清晰告诉你两个节点的内容是否一致。

几个要注意的细节

  • 大小写敏感:XPath 1.0的字符串比较是严格区分大小写的,比如"Morgan Freeman"和"morgan freeman"会被判定为不相等。
  • 空白字符的影响:节点文本里的换行、首尾空格、中间连续空格都会被算进字符串值里。如果你的XML因为格式缩进带有多余空白,可以用normalize-space()函数处理,避免误判:
    boolean(normalize-space(/Cinema/directors/director) = normalize-space(/Cinema/crew/presenter))
    
    normalize-space()会自动去掉文本首尾空白,把中间连续空白替换成单个空格,让比较更精准。

实际测试示例

用你提供的XML:

return (<Cinema>
  <directors>
    <director>Morgan Freeman</director>
  </directors>
  <crew>
    <presenter>Morgan Freeman</presenter>
  </crew>
</Cinema>
)
  • 用/Cinema[directors/director = crew/presenter]会成功选中这个<Cinema>节点;
  • 用boolean(...)会返回true();
  • 如果把<presenter>的内容改成"Morgan F",表达式就会返回false()。

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

相关产品推荐
方舟 Agent Plan

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

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