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

发布于 2024-10-22 01:17:28 字数 1093 浏览 6 评论 0 原文

假设我有以下 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...) 不起作用,因为它不返回节点。

Let's say I have the following 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>

and the following XQuery

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

this, of course, outputs:

title1
title1
title2

How can I use distinct-values in order to remove duplicates? I wonder because for essentially only gives me one item per iteration and I can't call distinct-values on $A. Or is there any other way to remove duplicate output?

The problem is that I need to refer to another node, so basically calling distinct-values(doc...) doesn't work, as it doesn't return nodes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2024-10-29 01:17:28

更新

要过滤重复节点,请使用 这个答案

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

这为您提供了具有不同标题<的所有A /代码>s。

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

UPDATE END

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)

UPDATE

to filter duplicate nodes, use a variation of the xpath from this answer:

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

this gives you all the As with different titles.

you can expand this xpath expression to also filter on Y - no need for XQuery FLWOR.

UPDATE END

apply the distinct-values to the xpath expression over which you want to iterate:

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

or just

distinct-values(doc('test.xml')//A/X/@title)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文