У меня есть интересная проблема с XSL. У нас есть входной файл XML, который содержит рядом с контентом несколько настроек, которые определяют, как мы выводим контент. В настоящее время я борюсь с форматированием чисел в файле XSL.
Возможны следующие форматы:
- 1,234.5
- 1.234,5
- 1234,5
- 1234,5
Я получаю эти форматы, как указано выше, в моем XML-файле:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<settings>
<DefaultCurrency>EUR</DefaultCurrency>
<DefaultDateFormat>DD.MM.YYYY</DefaultDateFormat>
<DefaultNumberFormat>1.250,65</DefaultNumberFormat>
<AllowOrdering>true</AllowOrdering>
</settings>
<productlist>
<item>
<product>
<productid>Product1</productid>
<weight>0.123</weight>
</product>
<customerprice>123.03</customerprice>
</item>
<item>
<product>
<productid>Product2</productid>
<weight>12312.123</weight>
</product>
<customerprice>12.00</customerprice>
</item>
<item>
<product>
<productid>Product3</productid>
<weight>12.123</weight>
</product>
<customerprice>13.23</customerprice>
</item>
</productlist>
</document>
Я пытался заставить это работать со следующим XSL-файлом, но я не могу заставить его дать мне правильные результаты (при изменении DefaultNumberFormat в XML форматирование также должно быть изменено).
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:decimal-format name="numberformat1" decimal-separator="." grouping-separator=","/>
<xsl:decimal-format name="numberformat2" decimal-separator=","/>
<xsl:decimal-format name="numberformat3" decimal-separator="," grouping-separator="."/>
<xsl:decimal-format name="numberformat4" decimal-separator="."/>
<xsl:template match="productlist">
<xsl:apply-templates select="item"/>
</xsl:template>
<xsl:template match="item">
ItemID: <xsl:value-of select="product/productid"/>
Weigh:
<xsl:choose>
<xsl:when test="/document/settings/DefaultNumberFormat = '1,250.65'">
<xsl:value-of select="format-number(product/weight, '#,##0.000', 'numberformat1')"/>
</xsl:when>
<xsl:when test="/document/settings/DefaultNumberFormat = '1250,65'">
<xsl:value-of select="format-number(product/weight, '#,##0.000', 'numberformat2')"/>
</xsl:when>
<xsl:when test="/document/settings/DefaultNumberFormat = '1.250,65'">
<xsl:value-of select="format-number(product/weight, '#,##0.000', 'numberformat3')"/>
</xsl:when>
<xsl:when test="/document/settings/DefaultNumberFormat = '1250.65'">
<xsl:value-of select="format-number(product/weight, '#,##0.000', 'numberformat4')"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="settings/*"/>
</xsl:stylesheet>
Я надеюсь, что кто-то может помочь мне здесь, я думаю, что я каким-то образом понял, как объединить формат числа и формат числа ...
Спасибо, Мартейн