让我们说,
我有一个引用,它有多个引号。它们因LineNumbers(1.1,1.2,2.1,2.2,...)而不同。在配置中(假设以1. *或2. *开头),我想总结所有价格(1.1,1.2,1.3)并将其放入xsl变量中。以同样的方式,如果有多个配置,我想做同样的事情。(将所有配置分组并将价格总和放入变量[v1,v2,v3])。
输入XML:
<Quotelines>
<name>p1</name>
<lineNo>1.1</lineNo>
<amount>100</amount>
<Qid>1234</Qid>
</Quotelines>
<Quotelines>
<name>p2</name>
<lineNo>1.2</lineNo>
<amount>1400</amount>
<Qid>1234</Qid>
</Quotelines>
<Quotelines>
<name>p3</name>
<lineNo>1.4</lineNo>
<amount>600</amount>
<Qid>1234</Qid>
</Quotelines>
<Quotelines>
<name>p1</name>
<lineNo>2.1</lineNo>
<amount>1300</amount>
<Qid>1234</Qid>
</Quotelines>
<Quotelines>
<name>p2</name>
<lineNo>2.2</lineNo>
<amount>100</amount>
<Qid>1234</Qid>
</Quotelines>
<Quotelines>
<name>p1</name>
<lineNo>1.1</lineNo>
<amount>100</amount>
<Qid>4321</Qid>
</Quotelines>
<Quotelines>
<name>p2</name>
<lineNo>1.2</lineNo>
<amount>100</amount>
<Qid>4321</Qid>
<Quotelines>
在上面给出的例子中,我想分离相同Qid(1234)的配置(1. ,2。)并获得要存储在variable1中的金额总和(1. em>),variable2(2。)等..,
这是我的XSL:
<xsl:template match="/">
<xsl:variable name="tmpTotal">
<xsl:for-each select="Quotelines>
<xsl:if test="starts-with(lineNo,'1.')">
<xsl:value-of select="amount"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="variable1">
<xsl:value-of select="sum($tmpTotal)"/>
</xsl:variable>
在这个XSL中,我用1 *硬编码lineNo。 我得到输出为(concatinating):
1001400600
必需的输出是:
2100
答案 0 :(得分:1)
你没有&#34; 总结每个有条件陈述的内部值&#34;。您可以使用sum()
函数直接对它们求和 - 然后在谓词中添加条件,例如:
<xsl:variable name="variable1" select="sum(Quotelines[starts-with(lineNo, '1.')]/amount)" />
在这个XSL中,我用1。*。
对lineNo进行了硬编码
为了避免硬编码,请使用Muenchian grouping(在XSLT 1.0中)或xsl:for-each-group
(在XSLT 2.0中)学习如何在XSLT中分组记录。