X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=xpi%2Fxpi_05.xhtml;fp=xpi%2Fxpi_05.xhtml;h=0000000000000000000000000000000000000000;hb=6ad5a39df30fc67494ecbc37babadbf58a213fda;hp=aa49a92f2b361e178a30b48023302d8040cd08c6;hpb=5ab05e8da9f56a68ede3a05dbce2fccf9f44b715;p=hacks%2FsimpleWebSlides.git diff --git a/xpi/xpi_05.xhtml b/xpi/xpi_05.xhtml deleted file mode 100644 index aa49a92..0000000 --- a/xpi/xpi_05.xhtml +++ /dev/null @@ -1,410 +0,0 @@ - - - - - XSLT (suite) - - - - - - - - - - - - - - - - - - - - -
-

XML et Programmation Internet

-

Cours 5

-
kn@lri.fr -
-

Structures de contrôle

-
-

xsl:value-of

-

On peut récupérer des nœuds texte dans le document source au - moyen de la balise <xsl:value-of select="xpath - expr"/>. L'expression xpath expr est - évaluée et convertie en chaîne de caractères en suivant - les conversions d'XPath (voir cours 3). -

-
-
-

Itération avec xsl:for-each

-

La balise <xsl:for-each select="xpath expr"> - corp de boucle - </xsl:for-each> - évalue le corp de la boucle pour chaque nœud renvoyé par - l'expression xpath expr. À chaque itération - le nœud considéré devient le nœud contexte (i.e. celui - renvoyé par l'axe self::)

-
-
-

Itération ordonnée xsl:sort

-

On peut modifier l'ordre dans lequel les éléments sont - parcourus par une boucle xsl:for-each en utilisant - l'élément -]]> qui n'est valide que comme fils d'un xsl:for-each - ou xsl:apply-templates

- -
-
-

Conditionnelle simple avec xsl:if

-

On peut évaluer conditionnellement une portion de code XSLT - en la plaçant dans une balise: - ... - ]]> Le résultat de l'expression est interprété - comme un booléen (selon les règles de conversion d'XPath). S'il - vaut vrai, le corp du xsl:if est exécuté.

-
-
-

Conditionnelle complexe avec xsl:choose

-

On peut écrire plusieurs portions de code, gardées par des - conditions distinctes - en les plaçant dans une balise: - code 1 - code 2 - code 3 - ... - code sinon - ]]> - Les conditions xsl:when sont évaluées dans l'ordre et - le corp de la première valant vrai est exécuté. Si aucune - condition n'est vérifiée, le corp de - l'instruction xsl:otherwise est exécuté. -

-
-
-

Exemple simple (génération d'une page Web)

-

On réutilise (encore) le fichier de recette:

- - -Tiramisú - - mascarpone - oeufs - sucre - café - biscuits - -2h - - Séparer les blancs des jaunes - … - … - - -]]> -
-
- - - - - Ingrédients du ]]><u><xsl:value-of select="descendant::title" /></u><![CDATA[ - - -

Ingrédients du ]]><xsl:value-of select="descendant::title" /> -

-

Utilisation avancée

-
-

Nom d'attributs ou d'éléments dynamiques

-

Il est fréquent de vouloir choisir dynamiquement les noms - des éléments. Par exemple :

- - - - - - .... code complexe pour calculer le texte .... - - - - - ]]> - -

code incorrect : les balises <b> -et <i> ne sont pas bien parenthésées

-
-
-

Solution naïve

-

On peut dupliquer le code de manière à respecter les balises - ouvrantes/fermantes :

- - - - .... code complexe pour calculer le texte .... - - - - - .... code complexe pour calculer le texte .... - - - ]]> - -

Inélégant et non-maintenable : si on a 10 cas, on copie cole - 10 fois le code complexe.

-
-
-

Nom d'attributs ou d'éléments dynamiques

-

On a besoin :

- -

Problème : XPath ne permet pas de définir des variables

-
-
-

Variables en XSLT (xsl:variable)

-

Comme dans tout langage, on veut pouvoir évaluer une - expression et donner un nom au résultat pour - pouvoir le réutiliser plusieurs fois. En XSLT, on utilise la - balise xsl:variable :

- - - Le document contient éléments foo. -]]> - -
-
-

Définitions complexes de variables

-

On peut aussi donner du contenu à l'élément xsl:variable, - pour définir la valeur de la variable :

- - - b - i - - ]]> - -
-
-

Portée des variables

-

Les variables sont non-modifiables une fois définies. Elles - sont visibles par tous les éléments suivant la balise - fermante </xsl:variable> se trouvant avant la - fermeture de l'élément contenant la variable. Exemple :

- - - - - - -

texte sur - : - -

-
- -]]> -
-
-
-

Création dynamique d'éléments ou d'attributs

-

On peut utiliser les instructions xsl:element - et xsl:attribute pour créer des éléments et des attributs - dont le nom est calculé dynamiquement : -

- - baz - ... - -]]> -

produira dans le document de sortie :

- - ... - -]]> -
-
-

Échappement d'expressions XPath dans les chaînes

-

À part les attributs select et test de - certaines balises XSLT, les autres attributs sont des chaines de - caractères. On peut cependant intégrer des expressions XPath au - moyen d'accolades { } -

- Le site!]]> - -

Dans le code ci-dessus, href étant un attribut non - interprété (ce n'est pas une balise XSLT), le chemin XPath - apparaîtra dans le résultat (ce qu'on ne veut pas). On peut écrire - :

- Le site!]]> - -
-
-

Retour sur notre exemple

- - - b - i - - - - - .... code complexe pour calculer le texte .... - -]]> -

Attention : il faut écrire {$nombalise} sinon le - processeur XSLT essayera de créer un - élément <$nombalise> ce qui est illégal (et - provoquera une erreur)

-
-

Autres fonctionalités

-
-

Spécifier le type de sortie

-

On peut placer une balise xsl:output dans la balise racine - de la feuille de style (xsl:stylesheet)

- -]]> - -
-
-

Copie de texte et de nœuds

- -
- -