我需要解析输出XML文件中的“货币”字段( DepositAmount ),并根据通过CSharp类传递的输入设置其小数点。
我正在将此输入从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显示为空白。 精度参数中没有任何值。请告诉您这里出了什么问题。 我也尝试过这种方式访问精度参数
答案 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>