1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Une feuille de style xsl est un document xml -->
<!-- Début de la feuille de style -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Variables globales, le mieux est de les lire depuis le XML -->
<xsl:variable name="larg_page">900</xsl:variable>
<!-- Début du traitement, par le noeud racine -->
<xsl:template match="/">
<!-- Affichage html -->
<html>
<!-- La partie en-tête -->
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
<meta http-equiv="Content-Language" content="fr" />
<link href="exemple.css" rel="stylesheet" type="text/css" />
</head>
<!-- Le corps de la page -->
<body class="defaut">
<!-- Pour chaque noeud "paragraphe" -->
<xsl:for-each select="site/page/paragraphe">
<!-- Calcul de la somme des ratios des images contenues dans chaque paragraphe -->
<xsl:variable name="tot_ratio">
<xsl:call-template name="somme_ratios">
<xsl:with-param name="total">0</xsl:with-param>
<xsl:with-param name="position">1</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<!-- Affichage du paragraphe -->
<p class="photo">
<!-- Pour chaque image contenue dans le paragraphe -->
<xsl:for-each select="image">
<!-- Calculs de la largeur et de la hauteur modifiée -->
<xsl:variable name="l_new">
<xsl:value-of select="number(@l_orig * $larg_page div @h_orig div $tot_ratio)" />
</xsl:variable>
<xsl:variable name="h_new">
<xsl:value-of select="number($l_new * @h_orig div @l_orig)" />
</xsl:variable>
<!-- La balise image, sur laquelle on ajoute des attributs paramétrables -->
<img alt="Image introuvable...">
<xsl:attribute name="src"><xsl:value-of select="." /></xsl:attribute>
<xsl:attribute name="width"><xsl:value-of select="$l_new" /></xsl:attribute>
<xsl:attribute name="height"><xsl:value-of select="$h_new" /></xsl:attribute>
</img>
<!-- Un espace pour décoller les images les unes des autres -->
<xsl:text> </xsl:text>
</xsl:for-each>
<!-- Fin du traitement de chaque image -->
</p>
<!-- Fin du paragraphe -->
</xsl:for-each>
<!-- Fin du noeud "paragraphe" -->
</body>
</html>
<!-- Fin de la page html -->
</xsl:template>
<!-- Fin du xml, noeud racine "/" -->
<!-- Fonction qui calcule la somme des rapports largeur/hauteur,
pour tous les noeuds "image" contenu dans le noeud courant -->
<xsl:template name="somme_ratios">
<!-- Paramètres d'entrée, l'appel externe se fait avec total=0 et position = 1 -->
<xsl:param name="total"/>
<xsl:param name="position"/>
<!--Dans quel cas somme-nous ? -->
<xsl:choose>
<!-- 1: oui, il existe une image -->
<xsl:when test="$position <= count(image)">
<!-- définition des deux variables largeur et hauteur (lecture d'attributs) -->
<xsl:variable name="largeur_i">
<xsl:value-of select="image[position()=$position]/@l_orig"/>
</xsl:variable>
<xsl:variable name="hauteur_i">
<xsl:value-of select="image[position()=$position]/@h_orig"/>
</xsl:variable>
<!-- calcul du ratio l/h de cette image -->
<xsl:variable name="ratio_i">
<xsl:value-of select="number($largeur_i div $hauteur_i)"/>
</xsl:variable>
<!-- puis on passe à l'image suivante, en mettant à jour les paramètres -->
<xsl:call-template name="somme_ratios">
<xsl:with-param name="total">
<xsl:value-of select="$total+$ratio_i"/>
</xsl:with-param>
<xsl:with-param name="position">
<xsl:value-of select="$position+1"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<!-- 2 : Sinon, cas final, plus d'image, on "affiche" le résultat -->
<xsl:otherwise>
<xsl:value-of select="$total"/>
</xsl:otherwise>
</xsl:choose>
<!-- Fin des cas -->
</xsl:template>
<!-- Fin de la fonction -->
</xsl:stylesheet>
<!-- Fin de la feuille de style xsl --> |
Partager