假设我有以下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本质上每次迭代只给我一个项目,而且我不能在$A上调用distinct-values。或者,是否有其他方法可以删除重复的输出?
问题是我需要引用另一个节点,所以基本上调用distinct-values(doc...)是行不通的,因为它不返回节点。
发布于 2011-03-13 00:18:38
更新
要过滤重复的节点,可以使用this answer中的xpath的变体
//A[index-of(//A/X/title, X/title)[1]]这将为您提供具有不同title的所有A。
您可以扩展此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)https://stackoverflow.com/questions/5283548
复制相似问题