1

我需要知道如何在样式表中使用 xPath 的数字函数来显示 HTML 输出:

1 + 3 + 4 + 17 + 8 + 15 = 48

样式表需要使用数字函数 position() 以及测试和条件语句来呈现 HTML 输出。

这是xml数据:

<account>
   <number>1</number>
   <number>3</number>
   <number>4</number>
   <number>17</number>
   <number>8</number>
   <number>15</number>
</account>

到目前为止,这就是我的 .xsl 中的所有内容。它只显示总和 48 ......

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:value-of select='sum(//number)'/>
    </xsl:template>
</xsl:stylesheet>

任何帮助将不胜感激 !

谢谢,

肖恩

4

2 回答 2

2

像这样的东西会起作用......

XSLT 1.0

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

    <xsl:template match="account">
        <html>
            <p>
                <xsl:apply-templates select="number"/>
                <xsl:value-of select="concat(' = ',sum(number))"/>              
            </p>
        </html>
    </xsl:template>

    <xsl:template match="number">
        <xsl:value-of select="."/>
        <xsl:if test="following-sibling::number">
            <xsl:text> + </xsl:text>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

HTML 输出

<html>
   <p>1 + 3 + 4 + 17 + 8 + 15 = 48</p>
</html>

此外,如果您必须position()在样式表中使用,您可以将其更改xsl:if为:

<xsl:if test="position() != count(/*/number)">
    <xsl:text> + </xsl:text>
</xsl:if>
于 2012-06-01T07:07:09.493 回答
2

在 XSLT 2.0 中,这几乎是一条直线:

<xsl:template match="account">
  <xsl:value-of select="string-join(number, ' + '), '=', sum(number)"/>
</xsl:template>

哦,你说你需要使用 position()。如果你认为你会因为不使用 position() 而被取消资格,那么你可以将其更改为:

<xsl:template match="account">
  <xsl:value-of select="string-join(number, ' + '), '=', sum(number)*position()"/>
</xsl:template> 

但是你可能会因为嘲笑法官的愚蠢而被取消资格。

于 2012-06-01T10:28:50.147 回答