XPATH:如何在call-template中使用变量

时间:2017-12-24 13:37:00

标签: xslt xpath

我正在编写一个XSLT来转换XML:我在Xpath中没有经验,而且我的XML太大而无法发布。

但这是我的问题:

此代码:工作正常:

<cac:testmathieu>           
  <xsl:variable name="lineAmount2" select="body:LineAmount * -1" />             
  <xsl:value-of select="../body:TaxTrans[body:TaxBaseAmount=$lineAmount2]/body:TaxAmount"/>
</cac:testmathieu>

然后,为什么下面的代码在上面代码的正下方使用时无效:

 <xsl:call-template name ="TaxTotalLine">
   <xsl:with-param name="TaxAmount" select="../body:TaxTrans[body:TaxBaseAmount=body:LineAmount*-1]/body:TaxAmount"></xsl:with-param>
 </xsl:call-template>

第二段代码只是第一个例子中代码的合并,还是我弄错了?

2 个答案:

答案 0 :(得分:0)

我想你想要

 <xsl:call-template name ="TaxTotalLine">
   <xsl:with-param name="TaxAmount" select="../body:TaxTrans[body:TaxBaseAmount = current()/body:LineAmount*-1]/body:TaxAmount"></xsl:with-param>
 </xsl:call-template>

将当前处理的节点的LineAmount(例如任何外部模板或for-each)与TaxTrans元素的TaxBaseAmout进行比较,并将谓词放在方括号中。

答案 1 :(得分:0)

感谢您的回复。

它实际上是&#34; current()&#34;的组合。和括号。

非常感谢!

亲切的问候

马修