gpt4 book ai didi

xml - XSLT 用于对值进行分组和求和

转载 作者:行者123 更新时间:2023-12-04 05:09:08 25 4
gpt4 key购买 nike

我是 XSLT 的新手,在完成结果时遇到了麻烦,我来这里是为了以防万一有人可以帮助我。

我有以下 XML:

<funds>
<bags>
<bag name="BAG_USD_MAIN" value="10.0" type="USD">
<pockets>
<pocket name="bank" value="7.5">
<pocket name="award" value="2.5">
</pockets>
</bag>
<bag name="BAG_USD_SAVINGS" value="290.75" type="USD">
<pockets>
<pocket name="bank" value="290.75">
</pockets>
</bag>
<bag name="BAG_EUR_EXTRA" value="890.0" type="EUR">
<pockets>
<pocket name="bank" value="753.0">
<pocket name="bank_eng" value="137.0">
</pockets>
</bag>
</bags>
</funds>

我希望能够以这种方式转换它:
<result>
<total type="USD">375.0</total>
<total type="EUR">890.0</total>
</result>

XSLT 可以吗?

谢谢,
问候
TS

最佳答案

因为您正在使用 XSLT 2.0 您可以使用 元素按 @type 对元素进行分组,然后使用 sum() 对组中的元素求和。

以下样式表解决了您要执行的操作:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>


<!-- Match the bags element -->
<xsl:template match="bags">
<result>
<!-- Group each bag element by its type -->
<xsl:for-each-group select="bag" group-by="@type">
<!-- Use the current key to display the type attribute -->
<total type="{current-grouping-key()}">
<!-- Sum all the elements from the current group -->
<xsl:value-of select="sum(current-group()/@value)" />
</total>
</xsl:for-each-group>
</result>
</xsl:template>

</xsl:stylesheet>

只是为了完整起见 XSLT 1.0 解决方案将基于 Muenchian 分组。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

<!-- Index all bag elements withing bags element using their
type attribute by using a key -->
<xsl:key name="currency-key"
match="/funds/bags/bag"
use="@type" />

<!-- Match bags element -->
<xsl:template match="bags">
<result>
<!-- Match the first bag element for a specific group -->
<xsl:apply-templates select="bag[generate-id() = generate-id(key('currency-key', @type)[1])]" />
</result>
</xsl:template>

<xsl:template match="bag">
<total type="{@type}">
<!-- Sum all the elements from the @type group -->
<xsl:value-of select="sum(key('currency-key', @type)/@value)" />
</total>
</xsl:template>

</xsl:stylesheet>

关于xml - XSLT 用于对值进行分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112496/

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