2009-07-30 10 views
25

J'utilise une feuille de style XSLT pour créer un document Excel à partir d'un fichier XML. Une des valeurs que je suis en train de mettre en évidence, je veux l'afficher en majuscules. Comment est-ce possible?Feuille de style XSLT: modification du texte en majuscules

+0

duplication possible de [Comment puis-je convertir une chaîne en majuscules ou en minuscules avec XSLT?] (Http://stackoverflow.com/questions/586231/how-can-i-convert-a-string-to -upper-or-lower-case-with-xslt) – user

Répondre

54

XSLT 2.0 possède les fonctions fn: majuscule() et fn: minuscule(). Toutefois, dans le cas où vous utilisez de XSLT 1.0, vous pouvez utiliser la traduction():

<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, bien que ce soit la même stratégie que ma réponse gardant les variables des lettres est certainement une solution plus réutilisable. – Welbog

+0

Absolument beau et facile :) –

18

Vous pouvez utiliser la fonction translate() dans XSLT 1.0:

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

Si vous êtes assez chanceux d'avoir accès à XSLT 2.0, vous pouvez utiliser la fonction upper-case():

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

Voir la XPath function reference page pour plus de détails.

+0

+1 ;-) – Tomalak

+3

Le nom d'Asker semble vaguement français ... qu'arrive-t-il à é? (désolé, je n'ai pas pu résister ...) – AakashM

+0

@AakashM: C'est le problème avec la fonction 'translate()'. Vous devez spécifier toutes ces choses vous-même. 'upper-case()' est une bien meilleure option mais elle n'est pas suffisamment supportée. – Welbog

-7

Le moyen le plus et le plus propre à atteindre est le cas transforme par les moyens de CSS.

construire une classe, comme:

.upper { text-transform: uppercase; } 

puis utilisez la classe span class:

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

qui est tout :)

Vous pouvez également utiliser d'autres transformations:

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

Je crois que le PO créait un fichier Excel; pas HTML. –

+0

Vous pouvez créer des fichiers Excel au format HTML. Je crois qu'il honorera CSS, mais je ne suis pas sûr à 100%. – iconoclast

+0

Les solutions ne permettent pas la comparaison insensible à la casse des éléments de texte dans le document - ce qui est souvent la raison pour forcer le texte dans un cas unique et cohérent. Cette solution ne s'appliquera qu'au rendu de sortie du résultat. – Pekka

2

U SE Assemblée comme ceci:

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

appel comme suit: select="user:ToUpper(//root/path)"

Ceci peut être utilisé en 1.0 ou 2.0.

+0

Merci pour les modifications suggérées mech. – SparrowEatsHawk

Questions connexes