условный выбор десятичного формата в xslt - PullRequest
2 голосов
/ 13 марта 2010

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

Если я попытаюсь поместить десятичный формат вне шаблона, то получу сообщение о том, что xsl: if не разрешено в этой позиции в таблице данных. Как я могу изменить десятичный формат на основе XML?

Спасибо Хосе

Ответы [ 2 ]

1 голос
/ 13 марта 2010

Элемент может быть определен только непосредственно под элементом. После определения вы можете использовать определенные форматы в функции числа-числа.

<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>
0 голосов
/ 13 марта 2010

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>
...