2009-07-30 16 views
25

Estoy usando una hoja de estilo XSLT para crear un documento de Excel a partir de un archivo XML. Uno de los valores que estoy extrayendo quiero mostrarlo en mayúscula. ¿Cómo es esto posible?XSLT Hoja de estilo: cambiar texto a mayúscula

+0

posible duplicado de [¿Cómo puedo convertir una cadena en mayúscula o minúscula con XSLT?] (Http://stackoverflow.com/questions/586231/how-can-i-convert-a-string-to -upper-or-lower-case-with-xslt) – user

Respuesta

54

XSLT 2.0 tiene funciones fn: mayúsculas() y fn: minúsculas(). Sin embargo, en caso de que utilice de XSLT 1.0, puede utilizar translate():

<xsl:template match="/"> 
    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" /> 
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> 
    <xsl:value-of select="translate(doc, $smallcase, $uppercase)" /> 
</xsl:template> 
+1

+1, aunque es la misma estrategia que mi respuesta, mantener las variables de las letras es ciertamente una solución más reutilizable. – Welbog

+0

Absolutamente hermoso y fácil :) –

18

Usted puede utilizar la función translate() en XSLT 1.0:

<xsl:value-of select="translate(//some-xpath, 
           'abcdefghijklmnopqrstuvwxyz', 
           'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" /> 

Si tienes la suerte de tener acceso a XSLT 2.0, puede utilizar la función upper-case():

<xsl:value-of select="upper-case(//some-xpath)"/> 

Ver el XPath function reference page para más detalles.

+0

+1 ;-) – Tomalak

+3

El nombre de Asker parece vagamente francés ... ¿qué le sucede a é? (Lo siento, no pude resistirme ...) – AakashM

+0

@AakashM: Ese es el problema con la función 'translate()'. Tienes que especificar todas estas cosas tú mismo. 'mayúscula()' es una opción mucho mejor, pero no es lo suficientemente compatible. – Welbog

3

XPath 2.0 tiene fn:upper-case(), que también realiza correlaciones de mayúsculas y minúsculas Unicode.

-7

La forma más fácil y más limpio para lograr caso es transforma por medio de CSS.

construir una clase, como:

.upper { text-transform: uppercase; } 

a continuación, utilizar la clase como span class:

<span class="upper"> 
    <xsl:value-of select="myTextField" /> 
</span> 

eso es todo :)

También puede utilizar otras transformadas:

text-transform: capitalize | uppercase | lowercase | none | inherit 
+3

Creo que el OP estaba creando un archivo de Excel; no HTML –

+0

Puede crear archivos de Excel por medio de HTML. Creo que respetará CSS, pero no estoy 100% seguro. – iconoclast

+0

Las soluciones no permiten la comparación de elementos de texto insensibles a mayúsculas y minúsculas en el documento, que a menudo es la razón para forzar el texto en un único caso consistente. Esta solución solo se aplicará a la representación de salida del resultado. – Pekka

2

U se una Asamblea como esto:

<msxsl:script implements-prefix="user" language="C#"> 
<!--{%assembly%}--> 
<![CDATA[ 

public string ToUpper(string stringValue) 
{ 
    string result = String.Empty; 

    if(!String.IsNullOrEmpty(stringValue)) 
    { 
     result = stringValue.ToUpper(); 
    } 

    return result; 
} 
]]> 
</msxsl:script> 

llaman como sigue: select="user:ToUpper(//root/path)"

Esto se puede utilizar en 1,0 o 2,0.

+0

Gracias por las ediciones sugeridas mech. – SparrowEatsHawk

Cuestiones relacionadas