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

È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top