Commençons par résoudre le problème précédent, c'est à dire générer les valeurs de tous les noeuds symbole:
| feuille8.xsl | appliquée sur atomes.xml --> résultat |
<xsl:template match="classification_atomique">
<html><body>
<xsl:for-each select="atome/symbole">
<xsl:value-of select="."/>
<xsl:text disable-output-escaping="yes">
<br></xsl:text>
</xsl:for-each>
</body></html>
</xsl:template>
|
<html> <body>H<br>He<br> Li<br>Be<br>B<br>C<br> N<br>O<br>F<br>Ne<br> Na<br>Mg<br>Al<br> Si<br>Ar<br></body> </html> |
L'instruction de boucle for-each sélectionne tous les noeuds correspondants au pattern atome/symbole à partir du noeud courant classification_atomique, et leur applique les transformations spécifiées.
<xsl:for-each select="pattern">
transformations </xsl:for-each>
sélectionne tous les éléments fils à
l'aide de l'attribut select, puis pour chacun, en fait le noeud
courant auquel sont appliquées les transformations spécifiées.
| feuille9.xsl | appliquée sur atomes.xml --> résultat |
<xsl:template match="classification_atomique">
<html><body>
<table>
<tr>
<th>symbole</th>
<th>ligne</th>
<th>colonne</th>
</tr>
<xsl:apply-templates/>
</table></body></html>
</xsl:template>
<xsl:template match="atome">
<tr>
<td>
<xsl:value-of select="nom"/>
</td>
<td>
<xsl:value-of select="@ligne"/>
</td>
<td>
<xsl:value-of select="@colonne"/>
</td>
</tr>
</xsl:template>
|
<html>
<body>
<table>
<tr>
<th>symbole</th>
<th>ligne</th>
<th>colonne</th>
</tr>
<tr>
<td>hydrogène</td>
<td>1</td>
<td>1</td>
</tr>
....
|
xsl:value-of sélectionne içi des attributs et génère la valeur est de l'attribut; l'@ signifie attribut dans XPath.
A partir de famille_atome.xml, donnez pour chaque famille sa liste d'atomes ainsi :
$ java Transform feuille8exo.xsl famille_atome.xml
<html>
<body>
<p>gaz rare : hélium néon argon </p>
<p>métal alcalin : lithium sodium </p>
<p>métal alcalino-terreux : bérillium magnésium </p>
<p>non métal : bore carbone azote oxygène fluor silicium </p>
</body>
</html>