2

XML の特定の情報に基づいて、スタイルシートの 10 進数形式を変更しようとしています。より正確には、私はこのようなXMLを持っています

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

言語が 2 の場合は 10 進形式をヨーロッパ言語として定義し、それ以外の場合はデフォルトにしようとしています。そこで、次のテンプレートを作成しました

<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 は、スタイルシートのこの位置では許可されていません!

10 進数形式をテンプレートの外に置こうとすると、stylsheet のこの位置では xsl:if は許可されていないというメッセージが表示されます。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 に答える