在xslt中有条件地选择十进制格式

时间:2010-03-12 23:01:58

标签: xslt decimalformat

我正在尝试根据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的十进制格式?

由于 何

2 个答案:

答案 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>