xml - XQuery 返回不在集合中的项目

标签 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="3",我会得到第 2 个月和第 3 个月。我尝试只搜索月份(没有年份过滤器),我得到同样的结果。为什么它会给我上个月的部分时间以及我想要的月份?如何删除不想要的月份?

最佳答案

到目前为止,您只是从输入中选择满足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>

尽管那样你必须将某些条件写两次。

关于xml - XQuery 返回不在集合中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960730/

相关文章:

conditional - xQuery simple if not empty 条件

javascript - 什么是服务器端 javascript 等同于 xquery 的 xpath

xml - 评估属性值是否可解析为xs:int

java - XPathExpression 选择子属性值忽略命名空间

Rvest 提交表单时找不到可能的提交目标

java - 如何引用从其他来源导入的 bean?

xml - SQL : How to find rows by filtering on a value within an XML column

xpath - xquery-如何获取数值列表中连续值之间的差异

xml - 在 XQuery 中查找存在于一个文档中但不存在于另一个文档中的元素的有效方法

xml - 如何在 PowerShell 中添加 XML 命名空间作为属性前缀?