在XSLT模板中解析多个参数

时间:2019-05-22 08:00:03

标签: xml xslt-1.0

我需要解析输出XML文件中的“货币”字段( DepositAmount ),并根据通过CSharp类传递的输入设置其小数点。

  1. 如果输入为1,则 DepositAmount 字段应为1个小数= 24.0
  2. 如果输入为3,则 DepositAmount 字段应具有3个小数= 24.000

我正在将此输入从ReportXML内部传递到XSLT,如下所示。 ValuePrecision 通过我的CSharp类传递。如上面的要求中所述,它将具有1或3或4的值。这是用ReportXML文件编写的代码

<Amount select="TotalValueofAmt" precision="ValuePrecision"/>

在XSLT内部,我通过XSLT 1.0的 with-param 关键字接收此输入,如下所示

    <xsl:template match="amount">
          <xslo:call-template name="__makeAmount__">

              <xslo:with-param name="str"  select="@select"/>
              <xslo:with-param name="decPrecision" select="@precision"/>

            </xslo:call-template>
    </xsl:template>



<xslo:template name="__makeAmount__">
        <xslo:param name="str"/>
        <xslo:param name="decPrecision"/> 
        <xslo:if test="$decPrecision= 1">
          <xslo:value-of>
            <xsl:attribute name="select">translate(format-number($str,'0.0000'),'.',$__decSep__)</xsl:attribute>
          </xslo:value-of>
        </xslo:if>
        <xslo:if test="$decPrecision= 2">
          <xslo:value-of>
            <xsl:attribute name="select">translate(format-number($str,'0.0'),'.',$__decSep__)</xsl:attribute>
          </xslo:value-of>
        </xslo:if>
        <xslo:if test ="$decPrecision=3">
          <xslo:value-of>
            <xsl:attribute name="select">translate(format-number($str,'0.00'),'.',$__decSep__)</xsl:attribute>
          </xslo:value-of>
        </xslo:if>        
      </xslo:template>

但是,转换后,输出XML显示为空白。 精度参数中没有任何值。请告诉您这里出了什么问题。 我也尝试过这种方式访问​​精度参数

1 个答案:

答案 0 :(得分:0)

请考虑以下简化示例:

XML

<input>
    <entry amount="123" precision="1"/>
    <entry amount="123" precision="2"/>
    <entry amount="123" precision="3"/>
    <entry amount="123" precision="4"/>
</input>

XSLT 1.0

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

<xsl:template match="/input">
    <output>
        <xsl:for-each select="entry">
            <amount>
                <xsl:value-of select="format-number(@amount, substring('#.0000', 1, 2 + @precision))"/>
            </amount>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

结果

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <amount>123.0</amount>
  <amount>123.00</amount>
  <amount>123.000</amount>
  <amount>123.0000</amount>
</output>