【问题标题】:XPath Boolean Expression Always Returns TrueXPath 布尔表达式始终返回 True
【发布时间】:2017-08-08 20:57:55
【问题描述】:

我正在使用 Java 的 XPath API 评估以下 XPath 布尔表达式。但是,表达式始终返回 true。

boolean(//InteractionControl/MessageId[text() = "fdsfsd"])

XML 文档中 MessageId 节点的文本值为“9000”,因此上述 XPath 表达式应该返回 false,除非我遗漏了什么。

【问题讨论】:

  • 如果 count(//InteractionControl/MessageId[text() = "fdsfsd"]) 不是 0,那么你的 xpath 匹配非空节点集
  • @IvanPronin 这应该是一个答案,而不是评论。
  • @Jim Garrison,谢谢,添加了答案
  • 您的文档中有多少 MessageId 元素?如果您发布了一个产生意外结果的示例 XML 文档,将会很有帮助。

标签: java xpath


【解决方案1】:

如果 count(//InteractionControl/MessageId[text() = "fdsfsd"]) 不为 0,则您的 xpath 匹配非空节点集,这会将 boolean() 函数解析为 true。看这里: https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/boolean

【讨论】:

  • 好多了。避免在 cmets 中提供完整、准确的答案 :-)
  • 我尝试了两个不同的 count XPATH 表达式,它们都返回了 48 的值。 count(InteractionControl/MessageId[text() = "5050"]) count(/InteractionControl/MessageId[text( ) = "392493294-394329432"]) 但是,在我正在评估的 XML 文档中,它们实际上并没有匹配的地方。会不会是 Java 的 XPATH API 的问题?
【解决方案2】:

我通过使用 XPath API 中的“评估”函数解决了这个问题,该函数接受一个指定返回类型的参数。

Boolean evaluation = xPath.compile(xPathStr).evaluate(xmlDocument, XPathConstants.BOOLEAN)

也许不接受指定返回类型的参数的“评估”函数存在错误。

【讨论】:

  • 如果没有第二个参数,evaluate() 应该将结果转换为字符串,它应该是“true”或“false”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2011-02-27
  • 2012-09-26
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多