我在以下文档上编写一些XQuery:
<pages>
<page>
<content yearID="1998">
<month monthID="1">
...
</month>
<month monthID="2">
...
</month>
...
</content>
<page>
</pages>
我想查询给定年份和月份的文档,并使其仅返回该月份的整个节点(不包括其他月份)。我的XQuery如下:
for $x in doc("alcala/ledger.xml")//pages/page
where $x/content[@yearID="1998"] and $x/content/month[@monthID="2"]
return $x
我的结果是给我第1个月和第2个月。如果我搜索monthID =“ 3”,则得到第2个月和第3个月。我只尝试了一个月的搜索(没有年份过滤器),但得到的结果相同。为什么给我上个月的一部分以及我想要的月份?如何删除不需要的月份?
到目前为止,您只是page
从输入中选择满足您where
条件的元素。如果您想操纵输入(即删除month
您不感兴趣的输入),则需要构造新内容,例如,一种简单的方法是使用
for $x in /pages/page
where $x/content[@yearID="1998"] and $x/content/month[@monthID="2"]
return
<page>{
$x/content[@yearID = 1998]
!<content>{
@*, month[@monthID = 2]
!<month>{@*, node()}</month>
}</content>
}</page>
尽管那样,您必须两次编写一些条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句