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

时间:2011-03-12 15:51:35

标签: duplicates unique xquery

假设我有以下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>

和以下XQuery

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

这当然是输出:

title1
title1
title2

如何使用distinct-values删除重复项?我想知道因为for每次迭代只给我一个项目,我不能在distinct-values上调用$A。或者还有其他方法可以删除重复的输出吗?

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

1 个答案:

答案 0 :(得分:5)

<强> 更新

过滤重复的节点,使用this answer的xpath变体:

//A[index-of(//A/X/title, X/title)[1]]

这会为您提供具有不同A s的所有title

您可以展开此xpath表达式以过滤Y - 不需要XQuery FLWOR

更新结束

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

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

或只是

distinct-values(doc('test.xml')//A/X/@title)