我正在尝试根据XML的某些信息修改样式表的十进制格式。更多的是exaclty,我有一个像这样的XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<REPORT>
<LANGUAGE>2</LANGUAGE>
<MYVALUE>123456.78</MYVALUE>
</REPORT>
我正在尝试将十进制格式定义为欧洲语,如果语言为2,则默认为otherwse。所以我创建了以下模板
<xsl:template match="REPORT">
<xsl:if test="$language=2">
<xsl:decimal-format decimal-separator=',' grouping-separator='.' />
</xsl:if>
<xsl:value-of select ="format-number(MYVALUE,'###.###,00')"/>
</xsl:template>
因此它显示欧洲格式或标准格式的数字。但我收到以下错误
样式表中的此位置不允许使用xsl:decimal-format!
如果我尝试将十进制格式放在模板之外,那么我得到的信息是xsl:if不允许在sthylsheet中的这个位置。如何更改基于XML的十进制格式?
由于 何
答案 0 :(得分:1)
元素只能直接在元素下定义。在定义之后,您可以使用format-number函数中定义的格式。
<xsl:stylesheet ... namespaces, etc. ...>
<xsl:decimal-format name="de" decimal-separator=',' grouping-separator='.'/>
<xsl:decimal-format name="us" decimal-separator='.' grouping-separator=','/>
<xsl:param name="numFormat">
<xsl:choose>
<xsl:when test="/REPORT/@language = 2">
<xsl:text>us</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>de</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:template match="REPORT">
<xsl:choose>
<xsl:value-of select="format-numer(MYVALUE, '###.###,00', $numFormat)"/>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
decimal-format
必须是顶级元素,但是您可以将其命名,然后在条件构造中引用该名称,或许类似以下内容将适合您。
<xsl:decimal-format name="format1" decimal-separator=',' grouping-separator='.' />
<xsl:template match="REPORT">
<xsl:choose>
<xsl:when test="$language=2">
<xsl:value-of select="format-number(MYVALUE,'###.###,00','format1')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="MYVALUE"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>