根据XQuery中的子节点选择distinct-values

slh*_*hck 5 xquery unique duplicates

假设我有以下XML:

<info>
    <channel>
        <A>
          <X>
            <title>title1</title>
          </X>
          <Y value="20"/>
        </A>
    </channel>
    <channel>
        <A>
          <X>
            <title>title1</title>
          </X>
          <Y value="20"/>
        </A>
        <A>
          <X>
            <title>title2</title>
          </X>
          <Y value="20"/>
        </A>
    </channel>
</info>
Run Code Online (Sandbox Code Playgroud)

和以下的XQuery

{
for $A in doc('test.xml')//A
let $TITLE := $A/X/title
where string($A/Y/value) > 20
return
  string($TITLE)
}
Run Code Online (Sandbox Code Playgroud)

这当然是输出:

title1
title1
title2
Run Code Online (Sandbox Code Playgroud)

如何使用distinct-values以删除重复项?我不知道,因为for基本上只给了我每次迭代的一个项目,我不能叫distinct-values$A.或者有没有其他方法来删除重复输出?

问题是我需要引用另一个节点,所以基本上调用distinct-values(doc...)不起作用,因为它不返回节点.

ax.*_*ax. 5

UPDATE

要过滤重复的节点,请使用此答案中的xpath变体:

//A[index-of(//A/X/title, X/title)[1]]
Run Code Online (Sandbox Code Playgroud)

这给了你所有As不同的titles.

你可以扩展这个xpath表达式也可以过滤Y- 不需要XQuery FLWOR.

更新结束

应用于distinct-values要迭代的xpath表达式:

for $title in distinct-values(doc('test.xml')//A/X/@title)
return string($title)
Run Code Online (Sandbox Code Playgroud)

要不就

distinct-values(doc('test.xml')//A/X/@title)
Run Code Online (Sandbox Code Playgroud)