我在下面的文档中写了一些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 =&#34; 3&#34;,我会得到第2个月和第3个月。我已经尝试了一个月的搜索(没有年过滤器)我得到了相同的结果。为什么它会给我上个月的一部分以及我想要的月份?如何删除我不想要的月份?
答案 0 :(得分: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>
虽然这样你必须两次写下一些条件。