我对 dom4j 包含的 XPath 有一个小问题…
假设我的 XML 是
<Home> <Addr> <Street>ABC</Street> <Number>5</Number> <Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment> </Addr> </Home>
假设我想在给定根元素的文本中找到所有具有 ABC 的节点…
所以我需要编写的 XPath 是
//*[contains(text(),'ABC')]
然而,这不是 dom4j 返回的......这是一个 dom4j 问题还是我理解 XPath 的工作原理,因为该查询只返回Street元素而不返回Comment元素?
Street
Comment
DOM 使Comment元素成为具有四个标签的复合元素
[Text = 'XYZ'][BR][BR][Text = 'ABC']
我会假设查询应该仍然返回元素,因为它应该找到元素并在其上运行包含,但它没有......
以下查询返回元素,但它返回的远不止元素——它还返回父元素,这对问题来说是不可取的。
有谁知道只返回元素<Street/>和的 XPath 查询<Comment/>?
<Street/>
<Comment/>
该<Comment>标记包含两个文本节点和两个<br>作为子节点的节点。
<Comment>
<br>
你的 xpath 表达式是
为了打破这一点,
*
[]
text()
contains
BLAH BLAH BLAH
您需要将其更改为
//*[text()[contains(.,'ABC')]]
.
'ABC'