1

你知道做 XQuery 查询来选择两个单例标签之间的内容吗,例如

<pb n="1"/>
   this is <foo>page</foo> number one
<pb n="2"/>
   this is <bar>page</bar> number two
<pb n="3"/>
   this is <x>page</x> number three

我想要例如第二页的内容,所以 between<pb n="2"/>和 next <pb/>。输出应该是:

   this is <bar>page</bar> number two
4

3 回答 3

3

您可以following-sibling与运算符一起使用<<,如下所示:

let $xml := <xml>
<pb n="1"/> 
   this is <foo>page</foo> number one 
<pb n="2"/> 
   this is <bar>page</bar> number two 
<pb n="3"/> 
   this is <x>page</x> number three 
</xml>
return
  $xml/pb[2]/following-sibling::node()[. << $xml/pb[3]]

于 2012-07-18T11:26:43.377 回答
1

请参阅TEI wiki 上的David Sewell 的里程碑块()函数。请注意,本文还指向一个 eXist-db 扩展函数util:get-fragment-between()

于 2012-07-18T14:37:53.547 回答
0

只是这个查询,恰好是一个纯 XPath 2.0 表达式

/*/node()[not(self::pb) and preceding-sibling::pb[1]/@n eq '2']

在此 XML 文档上执行时(提供的 XML 片段包装在单个顶部元素中):

<t>
    <pb n="1"/>
       this is <foo>page</foo> number one
    <pb n="2"/>
       this is <bar>page</bar> number two
    <pb n="3"/>
       this is <x>page</x> number three
</t>

产生了想要的正确结果:

   this is <bar>page</bar> number two
于 2012-07-19T02:46:40.267 回答