首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据XQuery中的子节点选择不同的值

根据XQuery中的子节点选择不同的值
EN

Stack Overflow用户
提问于 2011-03-12 23:51:35
回答 1查看 9.1K关注 0票数 5

假设我有以下XML:

代码语言:javascript
复制
<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

代码语言:javascript
复制
{
for $A in doc('test.xml')//A
let $TITLE := $A/X/title
where string($A/Y/value) > 20
return
  string($TITLE)
}

当然,这是输出:

代码语言:javascript
复制
title1
title1
title2

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-13 00:18:38

更新

要过滤重复的节点,可以使用this answer中的xpath的变体

代码语言:javascript
复制
//A[index-of(//A/X/title, X/title)[1]]

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

您可以扩展此xpath表达式,以便也对Y进行过滤-不需要XQuery FLWOR

更新结束

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

代码语言:javascript
复制
for $title in distinct-values(doc('test.xml')//A/X/@title)
return string($title)

或者只是

代码语言:javascript
复制
distinct-values(doc('test.xml')//A/X/@title)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5283548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档