XSL / XML添加节点以创建总计

时间:2018-04-17 14:54:00

标签: xml function xslt

我是XML / XSL的新手,并且相信我需要一个函数来处理这个请求。

我有一个表单,需要有一个具有相同名称的节点的总数。

----------------- TOTAL Section --------------------------

<th align="left"><font size="2"><xsl:text>Total Freight & Other Charges:
</xsl:text></font></th>
<td><font size="2"> $<xsl:value-of select='format-number(Document-810/SUMMARY/SAC/SAC05, "###,###,##0.00")'/></font></td>

-------------各个节点的部分---------

<xsl:for-each select="Document-810/SUMMARY/SAC">
<tr>
<th align="left"><xsl:text>Amount</xsl:text></th>
<td colspan="2"><font size="2"><xsl:value-of select="concat('$', format-number(SAC05 div 100, '###,###,###.00'))" />
</font>   
</td>
<th align="left"><font size="2"><xsl:text>Description</xsl:text></font></th>
<td colspan="7"><font size="2">
<xsl:value-of select="SAC15"/></font>
</td>           
</tr>
</xsl:for-each> 

1 个答案:

答案 0 :(得分:0)

假设用于转换的输入XML如下所示

<Document-810>
    <SUMMARY>
        <SAC>
            <SAC05>1000</SAC05>
            <SAC15>Description 1</SAC15>
        </SAC>
        <SAC>
            <SAC05>2000</SAC05>
            <SAC15>Description 2</SAC15>
        </SAC>
        <SAC>
            <SAC05>3000</SAC05>
            <SAC15>Description 3</SAC15>
        </SAC>
        <SAC>
            <SAC05>4000</SAC05>
            <SAC15>Description 4</SAC15>
        </SAC>
        <SAC>
            <SAC05>5000</SAC05>
            <SAC15>Description 5</SAC15>
        </SAC>
    </SUMMARY>
</Document-810>

您可以使用以下代码段来计算<SAC05>节点上下文中所有<SUMMARY>个节点中值的总和。

<xsl:variable name="totalAmt" select="sum(SAC/SAC05) div 100" />

然后使用concat()format-number()函数以$XXX.XX格式显示值。

<xsl:value-of select="concat('$', format-number($totalAmt, '###,###,##0.00'))"/>

下面是可用于获取HTML表格的XSLT(您可以将其用作参考,并根据您的要求更改表格结构)。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="html" />
    <xsl:strip-space elements="*" />

    <xsl:template match="SUMMARY">
        <html>
            <body>
                <table cellpadding="3" cellspacing="0" border="1">
                    <tr>
                        <th align="left"><font size="2"><xsl:text>Total Freight &amp; Other Charges:</xsl:text></font></th>
                        <td align="left"><font size="2">
                                <xsl:variable name="totalAmt" select="sum(SAC/SAC05) div 100" />
                                <xsl:value-of select="concat('$', format-number($totalAmt, '###,###,##0.00'))"/>
                            </font></td>
                    </tr>
                    <tr>
                        <th align="left"><font size="2"><xsl:text>Amount</xsl:text></font></th>
                        <th align="left"><font size="2"><xsl:text>Description</xsl:text></font></th>
                    </tr>
                    <xsl:for-each select="SAC">
                        <tr>
                            <td><font size="2"><xsl:value-of select="concat('$', format-number(SAC05 div 100, '###,###,###.00'))" /></font></td>
                            <td><font size="2"><xsl:value-of select="SAC15" /></font></td> 
                        </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

输出

HTML Output