我试图找到一种在节点内搜索字符串的方法,但不包括那些节点的某些子元素的内容。简单明了,我想在文本的段落中搜索一个字符串,不包括作为段落的子元素的脚注。
例如,
我的文件是:
<document>
<p n="1">My text starts here/</p>
<p n="2">Then it goes on there<footnote>It's not a very long text!</footnote></p>
</document>
当我在搜索“text”时,我希望Xpath / XQuery
检索第一个p元素,而不是第二个p元素(其中“text”仅包含在脚注子元素中)。
我尝试了contains()
函数,但它检索了两个p元素。
任何帮助都会非常感激:)
答案 0 :(得分:14)
我想在中搜索一个字符串 文本的段落,不包括 脚注是儿童元素 段落
XPath 1.0 - 唯一的解决方案:
使用强>:
//p//text()[not(ancestor::footnote) and contains(.,'text')]
针对以下XML文档(从您的文档中获取但在p
中添加了footnote
以使其更有趣):
<document>
<p n="1">My text starts here/</p>
<p n="2">Then it goes on there
<footnote>It's not a very long text!
<p>text</p>
</footnote>
</p>
</document>
此XPath表达式精确选择所需的文本节点:
My text starts here/
答案 1 :(得分:4)
//p[(.//text() except .//footnote//text())[contains(., 'text')]]
答案 2 :(得分:1)
/document/p[text()[contains(., 'text')]]
应该这样做。
答案 3 :(得分:0)
作为记录,作为其他答案的补充,我发现这个解决方法似乎也可以完成这项工作:
//p[contains(child::text()|not(descendant::footnote), "text")]