selezione condizionale di decimale formato in XSLT
-
19-09-2019 - |
Domanda
Sto cercando di modificare il decimale formato di un foglio di stile in base a determinate informazioni di un XML. Più exaclty, ho un XML come questo
<?xml version="1.0" encoding="ISO-8859-1"?>
<REPORT>
<LANGUAGE>2</LANGUAGE>
<MYVALUE>123456.78</MYVALUE>
</REPORT>
Sto cercando di definire il formato decimale come europeo se la lingua è 2, e otherwse default. Così ho creato il seguente modello
<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>
Così si vede il numero in formato europeo o in formato standard. Ma sto ottenendo il seguente errore
xsl: decimale formato non è consentito in questa posizione nel foglio di stile
Se provo a mettere decimale formato al di fuori del modello, quindi ottengo il messaggio che il xsl: se non è consentito in questa posizione nel sthylsheet. Come posso cambiare il decimale formato basato in XML?
Grazie Jose
Soluzione
decimal-format
deve essere un elemento di livello, tuttavia è possibile assegnare un nome e poi fare riferimento al nome in un costrutto condizionale, forse qualcosa di simile a quanto segue lavorerà per voi.
<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>
Altri suggerimenti
L'elemento può solo definito direttamente sotto l'elemento. Dopo la definizione È quindi possibile utilizzare i formati definiti nella funzione format-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>