XSLT 1.0高级计算

时间:2013-08-30 15:58:52

标签: xslt xslt-1.0

我一直在撞墙上撞了一会儿。我们的应用程序处理来自另一个系统的复杂结构XML发票发票包含包含各种计数的信息行。这些计数可能包含也可能不包含值。有一个整体文件费用。我们需要计算单位费用。公式将是总成本除以计数总数。

我一直在研究其他人提供的关于在XSLT1.0中求和的例子。我可以使用xsl:call-template来获取计数的总和,但我不知道如何将结果应用于计算单位价格。

示例XML

<Document>
    <Row>
        <Count1>
            <Value>10</Value>
        </Count1>
        <Count2>
            <Value/>
        </Count2>
    </Row>
    <Row>
        <Count1>
            <Value>5</Value>
        </Count1>
        <Count2>
            <Value>6</Value>
        </Count2>
    </Row>
    <Row>
        <Count1>
            <Value>2</Value>
        </Count1>
        <Count2>
            <Value>3</Value>
        </Count2>
    </Row>
    <Charge>
        <Value>260</Value>
    </Charge>
</Document>

如果我能看到如何获得以下XML输出,这可能会告诉我我需要什么。

<Document>
    <Row>
        <Total>10</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>11</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>15</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
</Document>

非常感谢提前

1 个答案:

答案 0 :(得分:0)

您只需要对所需的值调用sum(),如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/Document">
    <Document>
        <xsl:apply-templates select="Row"/>
    </Document>
  </xsl:template>
  <xsl:template match="Row">
    <Row>
        <Total>
            <xsl:value-of select="sum(./*[Value&gt;0]/Value)"/>
        </Total>
        <UnitPrice>10</UnitPrice>
    </Row>
  </xsl:template>
</xsl:stylesheet>

这给出了输出:

<Document>
    <Row>
        <Total>10</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>11</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>5</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
</Document>