XQuery returns 项不在集合中
XQuery returns items not in set
我正在为以下文档编写一些 XQuery:
<pages>
<page>
<content yearID="1998">
<month monthID="1">
...
</month>
<month monthID="2">
...
</month>
...
</content>
<page>
</pages>
我想查询给定年份和月份的文档,并使其 return 整个节点仅包含该月份(不包括其他月份)。我的 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>
尽管这样你必须将某些条件写两次。
我正在为以下文档编写一些 XQuery:
<pages>
<page>
<content yearID="1998">
<month monthID="1">
...
</month>
<month monthID="2">
...
</month>
...
</content>
<page>
</pages>
我想查询给定年份和月份的文档,并使其 return 整个节点仅包含该月份(不包括其他月份)。我的 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>
尽管这样你必须将某些条件写两次。