You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT开发问题:基于唯一TaxID属性对符合条件的area值求和计算

XSLT按唯一属性分组求和解决方案

方案1:XSLT 2.0及以上版本实现

XSLT 2.0 内置for-each-group分组语法,实现逻辑更简洁:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/InRoads/GeometryProject">
        <!-- 按TaxID分组 -->
        <xsl:for-each-group select="HorizontalAlignment" group-by="@TaxID">
            <!-- 计算当前组内Type=FEE的area总和 -->
            <xsl:variable name="totalFeeArea" select="sum(current-group()[@Type='FEE']/@area)" />
            <!-- 取当前组的ExArea(同TaxID的ExArea值一致,取组内第一个节点即可) -->
            <xsl:variable name="exArea" select="current-group()[1]/@ExArea" />
            <!-- 输出结果 -->
            <xsl:value-of select="concat('TaxID ', current-grouping-key(), ' remaining area = ', $exArea - $totalFeeArea, '&#10;')" />
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

方案2:XSLT 1.0版本实现

如果使用的是仅支持XSLT 1.0的旧处理器,可以用Muenchian分组法实现:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <!-- 定义按TaxID匹配HorizontalAlignment节点的key -->
    <xsl:key name="taxIdGroup" match="HorizontalAlignment" use="@TaxID" />
    <xsl:template match="/InRoads/GeometryProject">
        <!-- 遍历每个TaxID的首个节点,实现去重分组 -->
        <xsl:for-each select="HorizontalAlignment[generate-id() = generate-id(key('taxIdGroup', @TaxID)[1])]">
            <xsl:variable name="currentTaxId" select="@TaxID" />
            <!-- 计算当前TaxID对应分组内Type=FEE的area总和 -->
            <xsl:variable name="totalFeeArea" select="sum(key('taxIdGroup', $currentTaxId)[@Type='FEE']/@area)" />
            <!-- 输出结果 -->
            <xsl:value-of select="concat('TaxID ', $currentTaxId, ' remaining area = ', @ExArea - $totalFeeArea, '&#10;')" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

输出验证

两种方案运行后都将得到预期结果:

TaxID 123 remaining area = 1900
TaxID 456 remaining area = 4800
TaxID 789 remaining area = 7800

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:39:04