условный выбор десятичного формата в xslt

Я пытаюсь изменить десятичный формат таблицы стилей на основе определенной информации 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?

Спасибо, Хосе.


person Jose L Martinez-Avial    schedule 12.03.2010    source источник


Ответы (2)


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>
person brabster    schedule 12.03.2010

Элемент может быть определен только непосредственно под элементом. После определения вы можете использовать определенные форматы в функции 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>
person AxelEckenberger    schedule 12.03.2010
comment
Да, это работает, но поскольку весь документ должен иметь одинаковый формат, я хотел бы определить его в начале документа, а не использовать выбор/когда каждый раз, когда мне нужно показать число. - person Jose L Martinez-Avial; 13.03.2010