gpt4 book ai didi

xml - XQuery中是否有一个xsl:for-each-group等效项?

转载 作者:行者123 更新时间:2023-12-03 17:04:21 26 4
gpt4 key购买 nike

如标题所述,XQuery中是否有一个xsl:for-each-group等效项?

我正在尝试做的是获取元素的子树,更改数据结构并像这样通过xml进行迭代。

例如

client.xml

<clients>
<client>
<fname>Sam</fname>
<order>6789</order>
</client>
</client>


products.xml

<products>
<product>
<id>6789</id>
<name>shirt</name>
<color>red</color>
</product>
<product>
<id>6789</id>
<name>shirt</name>
<color>blue</color>
</product>
<product>
<id>6789</id>
<name>pants</name>
<color>black</color>
</product>
</products>


因此,我可能想显示一个包含.Sam作为名称的输出.xml,其中包含有关他订购的产品的详细信息。 (代码仅是示例,整个产品中将有多个不同的产品和客户)

更新:

我目前拥有的for循环遍历 product并在 orderid匹配时返回值,但是调用 $a/color/text()将返回具有相同 color兄弟值的所有 <id>元素,即不是我想要的

最佳答案

使用XQuery 3.0,有。它引入了group by语句,该语句按特定元素分组。

在您的示例示例中,您可能希望按产品ID进行分组,例如:

for $product in /products/product
let $id := $product/id
group by $id
return $product


在XQuery中,始终可以使用for循环(flowr表达式)来实现 for each。但是,还有一个新引入的 fn:for-each函数可能会让您感兴趣。对于作为第一个参数给出的序列中的每个元素,它将应用某个功能(作为第二个参数给出)。所以您可以执行以下操作:

for-each(/products/product, function($product) { local:doSomethingWithProduct($product) })


可能值得注意的是,使用简单的XPath 1.0表达式也可以实现示例中想要实现的目标。您将使用获得与一个ID相关联的所有产品

/products/product[@id = /client/client[@name = "Sam"]/order]


最有可能的方法是使用纯XQuery 1.0模拟组。但这在很大程度上取决于具体的用例。

关于xml - XQuery中是否有一个xsl:for-each-group等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com