【问题标题】:XQuery returns items not in setXQuery 返回不在集合中的项目
【发布时间】:2018-10-02 07:08:51
【问题描述】:

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

【问题讨论】:

  • 您能否根据此示例输入提供您期望的确切输出?

标签: xml xquery xquery-3.0 flwor


【解决方案1】:

到目前为止,您只是从输入中选择满足where 条件的page 元素。如果您想操作输入(即删除您不感兴趣的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>

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

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2010-12-24
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多