XPath/XQuery:在节点中查找文本,但忽略特定后代元素的内容

Hem*_*mka 12 xpath xquery

我试图找到一种方法来搜索节点内的字符串,但不包括那些节点的某些子元素的内容.简单明了,我想在文本的段落中搜索一个字符串,不包括作为段落的子元素的脚注.

例如,

我的文件是:

<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>
Run Code Online (Sandbox Code Playgroud)

当我在搜索"text"时,我希望Xpath / XQuery检索第一个p元素,而不是第二个p元素(其中"text"仅包含在脚注子元素中).

我试过了这个contains()函数,但它检索了两个p元素.

任何帮助将非常感激 :)

Dim*_*hev 14

我想在文本的段落中搜索字符串,不包括作为段落的子元素的脚注

一个XPath 1.0 - 唯一的解决方案:

用途:

//p//text()[not(ancestor::footnote) and contains(.,'text')]
Run Code Online (Sandbox Code Playgroud)

针对以下XML文档(从您的文档中获取但在ps中添加s 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>
Run Code Online (Sandbox Code Playgroud)

此XPath表达式精确选择所需的文本节点:

My text starts here/
Run Code Online (Sandbox Code Playgroud)