xslt - XSLT, XPath, 使用 current() 的值进行选择和求和
问题描述
我有一个值列表,我需要总结不同的项目数量。一个简单的版本如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:boomi="http://boomi.com/custom-function">
<Item>
<id>801</id>
<qty>0</qty>
</Item>
<Item>
<id>802</id>
<qty>1</qty>
</Item>
<Item>
<id>802</id>
<qty>1</qty>
</Item>
</Items>
我正在使用以下 XSLT
<Items>
<xsl:for-each select="distinct-values(/Items/Item/id)" >
<Item>
<id>
<xsl:value-of select="current()" />
</id>
</Item>
</xsl:for-each>
</Items>
生成以下文档
<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:boomi="http://boomi.com/custom-function">
<Item>
<id>801</id>
</Item>
<Item>
<id>802</id>
</Item>
</Items>
但我还需要包括数量。我尝试了一些事情,这是最接近的,但不起作用:
<Items>
<xsl:for-each select="distinct-values(/Items/Item/id)" >
<Item>
<id>
<xsl:value-of select="current()" />
<xsl:value-of select="sum(/Items/Item[id=current()]/qty)" />
</id>
</Item>
</xsl:for-each>
</Items>
我认为它不起作用,因为 current() 是一个实际的节点?我试图做到这一点:
<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:boomi="http://boomi.com/custom-function">
<Item>
<id>801</id>
<qty>0</qty>
</Item>
<Item>
<id>802</id>
<qty>2</qty>
</Item>
</Items>
我会以完全错误的方式解决这个问题吗?谢谢。
解决方案
这是 michael.hor257k 指示的使用 XSLT 2.0 的(a)解决方案
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:boomi="http://boomi.com/custom-function">
<xsl:template match="/">
<Items>
<xsl:for-each-group select="/Items/Item" group-by="id" >
<Item>
<id>
<xsl:value-of select="current-grouping-key()" />
</id>
<qty>
<xsl:value-of select="sum(current-group()/qty)" />
</qty>
</Item>
</xsl:for-each-group>
</Items>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- sql-server - “distributor_admin”未定义为服务器上的远程登录,用户“distributor_admin”登录失败
- tempus-dominus-datetimepicker - 从一个日期时间选择器获取日期并在第二个日期时间选择器中显示并禁用
- javascript - 如何在函数块中获取用 var 语句声明的变量?
- android - 在屏幕共享时绘制框架以使用媒体投影(webrtc)显示捕获的内容高度宽度
- amazon-web-services - AWS 中两种不同类型的 VPC 链接的主要区别
- python - 二进制矩阵 aa(只包含 0, 1),为什么 sum(sum(aa)) 不等于 sum(sum(aa>0))?
- npm - 如何在离线机器上通过 npm 安装 appium
- r - 在 R 上使用 ggplot2 生成紧凑的科学记数法
- react-native - OkHttp certificatePinner 似乎不起作用
- elasticsearch - 如何编写包含多个字段的 query_string 的复合 Elasticsearch 查询?