2

我正在尝试根据 XML 的某些信息修改样式表的十进制格式。更确切地说,我有一个这样的 XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<REPORT>
   <LANGUAGE>2</LANGUAGE>
   <MYVALUE>123456.78</MYVALUE>
</REPORT>

如果语言为 2,我试图将十进制格式定义为欧洲,否则默认。所以我创建了以下模板

<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 的十进制格式?

谢谢何塞

4

2 回答 2

1

元素只能直接定义在元素之下。定义后,您可以在 fromat-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>
于 2010-03-12T23:16:00.977 回答
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>
于 2010-03-12T23:15:57.090 回答