2010-06-07 71 views
0

我对XSLT的使用时间不太长。我读过XSLT的变量无法在运行中更新,所以我如何执行以下任务。使用来自XML的XSLT进行动态数据处理

我想总结购买&销售并将它们放入一个变量,并根据这些值做出一些决定。 (例如,如果购买量大于销售量,那么做一些事情,如果没有,做一些事情)

<rows> 
    <row> 
     <col attr2="Purchase" >100.00</col> 
     <col attr2="Sales" >100.00</col> 
    </row> 
    <row > 
     <col attr2="Purchase" >19.16</col> 
     <col attr2="Sales" >12.94</col> 
    </row> 
    <row > 
     <col attr2="Purchase" >0.67</col> 
     <col attr2="Sales" >2.74</col> 
    </row> 
    <row > 
     <col attr2="Purchase" >71.95</col> 
     <col attr2="Sales" >61.54</col> 
    </row> 
    <row > 
     <col attr2="Purchase" >3.62</col> 
     <col attr2="Sales" >14.72</col> 
    </row> 
    <row > 
     <col attr2="Purchase">8.80</col> 
     <col attr2="Sales">1.22</col> 
    </row> 
    <row > 
     <col attr2="Purchase" >-4.28</col> 
     <col attr2="Sales" >6.53</col> 
    </row> 
</rows> 

如果有人知道,请帮助我。

回答

1

XSL变量是更常量:一旦设置,它们的值不能被改变。更改变量的唯一方法是使用递归模板,并使用命名参数来保存当前总和。

或者,如果XSLT没有sum函数!

<xsl:variable name="$purchase-total" select="sum(col[@attr2='Purchase'])" /> 
<xsl:variable name="$sales-total" select="sum(col[@attr2='Sales'])" /> 
<xsl:choose> 
    <xsl:when test="$purchase-total &gt; $sales-total"> 
     <!-- Do something --> 
    </xsl:when> 
    <xsl:otherwise> 
     <!-- Do something --> 
    </xsl:otherwise> 
</xsl:choose> 
+0

谢谢,快速apply.and它的工作原理。我需要购买和销售的绝对总和。我无法在这里使用abs功能? sum(arg(number(col [@ attr2 ='Sales']))) 有没有其他方法可以使用它。 – Imrul 2010-06-07 07:43:30

+0

'arg()'?你不是指'abs()'吗?不,我不认为你可以:'abs()'不返回节点集。为什么你想要绝对的总和? – Eric 2010-06-07 08:32:10

+0

对不起!它是abs()。购买/销售中有'价值。我只需要购买/销售的ABS价值。那我该怎么做呢? – Imrul 2010-06-07 08:55:13

0

您可以计算总和,如@Eric的示例所示。

您在您的评论问一个问题:要计算的x绝对值使用以下XPath表达式:

(x > 0)*x - not(x > 0)*x 

例如

随着所提供的XML文档,

<xsl:variable name="x" select="(/*/*/col[@attr2='Purchase'])[position()=last()]"/> 

    <xsl:value-of select="($x > 0)*$x - not($x > 0)*$x"/> 

生产

4.28 
+0

感谢您的回复。你能告诉我这里会有'x'吗?我尝试col [@ attr2 ='Sales']为'x',但它不起作用。如果你提供一些细节,那么它会有帮助。 – Imrul 2010-06-10 06:24:06

+0

@Imrul:我已经更新了我的答案,以演示如何使用此XPath表达式的示例。你可能没有选择正确的节点 - 输出这个值来确定你选择的是什么。 – 2010-06-10 12:40:52