AOUT 2004
sujet :
Solution de GrandFather:Soit un document xml dont on ne connait pas la structure. Quelle transformation faut-il appliquer pour obtenir tout le texte en majuscule (valeurs d'attributs comprises).
remarques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates select="*|@*|text()"/> </xsl:copy> </xsl:template> <xsl:template match="@*"> <xsl:attribute name="{name()}"> <xsl:value-of select="translate(.,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> </xsl:attribute> </xsl:template> <xsl:template match="text()"> <xsl:value-of select="translate(.,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> </xsl:template> </xsl:stylesheet>
Le but est évidemment de garder la même structure que le xml source. Ainsi le premier template permet de recopier les noeuds (on aurait pu aussi utiliser xsl:element, mais la solution aurait été plus longue!), le deuxième template recopie les attributs et transforme le texte en majuscule et le troisième transforme le texte en majuscule.
La transformation en majuscule passe par l'utilisation de translate. Il n'y a pas d'autre moyen sauf écrire une extension.
Partager