XQuery返回不在set中的项

时间:2018-04-21 22:27:18

标签: xml xquery xquery-3.0 flwor

我在下面的文档中写了一些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个月。我已经尝试了一个月的搜索(没有年过滤器)我得到了相同的结果。为什么它会给我上个月的一部分以及我想要的月份?如何删除我不想要的月份?

1 个答案:

答案 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>

虽然这样你必须两次写下一些条件。