【问题标题】:xquery skip elements if they exist alreadyxquery 跳过元素,如果它们已经存在
【发布时间】:2014-10-12 19:47:24
【问题描述】:

$a 是

(<pet name="a1">
<age num="1"/>
</pet>,
<pet name="a2">
<age num="2"/>
</pet>)

$b 是

(<pet name="a2">
<age num="9"/>
</pet>,
<pet name="a3">
<age num="11"/>
</pet>
<pet name="a3">
<age num="14"/>
</pet>

)

我正在尝试将以下内容作为输出($a 中的所有内容和 $b 中的所有内容,除了已经打印出来的内容)即,

(<pet name="a1">
<age num="1"/>
</pet>,
<pet name="a2">
<age num="2"/>
</pet>,
<pet name="a3">
<age num="11"/>
<age num="14"/>
</pet>)

由于&lt;pet name="a2"&gt; 已经从$a 打印出来,所以必须跳过$b 中具有相同属性的相同元素, 我在 xquery 中尝试了以下代码,但无法获得所需的结果。

for $l in $a
    for $m in $b
      return if ($m/@name!=$l/@name)

【问题讨论】:

    标签: xml xslt xquery exist-db


    【解决方案1】:

    这可以通过连接序列并使用谓词表达式过滤第二个序列来更简单地解决,无需循环:

    ($a | $b[not(@name = $a/@name)])
    

    【讨论】:

    • 我已经编辑了问题并在 $b 中添加了另一个子元素。我尝试“按@名称分组($a | $b [not(@ name = $a/@ name)])”,以在输出中对具有相同@名称的元素进行分组。这是正确的方法吗?
    • @thefragmenter 不,要使用group byorder by,您必须使用for ...(循环)表达式。但是,在您的示例中,按 @name 分组不会做任何事情,因为表达式的设计使得所有 @name 都是唯一的。
    猜你喜欢
    • 2016-05-30
    • 2012-09-03
    • 2021-06-03
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2011-06-24
    • 2019-06-23
    相关资源
    最近更新 更多