Beruflich Dokumente
Kultur Dokumente
Création dynamique
XSLT 2 d’éléments &
attributs
xsl:copy Exemple
<p>Hello, world!</p>
Copie peu profonde <xsl:template match="p">
<xsl:copy use-attribute-sets="P ">
<xsl:copy use-attribute-sets=”qnames”> <xsl:value-of select="."/>
<!-- Content: template --> </xsl:copy>
</xsl:template>
</xsl:copy> <xsl:attribute-set name="P">
<xsl:attribute name="align">left</xsl:attribute>
<xsl:attribute name="style">color:blue</xsl:attribute>
</xsl:attribute-set>
1
2/10/2009
Exemple Exemple
Transformation identité
<xsl:stylesheet> <xsl:template match=“node()”>
<xsl:template match=“@*|node()”> …
<xsl:copy> </stylesheet>
<xsl:apply-templates select= =“@*|node()”/>
</xsl:copy>
</xsl:template> Cette pattern ne matche pas les nœuds
</stylesheet> attributs
et les nœuds namespace
Attention aux axes implicites:
child::node() ne selectionne pas les attributs
xsl:element
xsl:copy-of
Copie profonde: insertion d’un fragment dans Cet élément XSL est utilisé pour créer
l’arbre résultat. Copie les attributs, les un élément avec un nom calculé
namespaces et les descendants
<xsl:element name=“name”
namespace=”URI”
<xsl:copy-of select=“expression”> use-attribute-sets=”qnames”>
<!-- Content: template --> <!-- Content: template-->
</xsl:copy> </xsl:element>
2
2/10/2009
xsl:attribute Exemple
<picture>
<xsl:attribute name="source">
Cet élément XSL est utilisé pour créer <xsl:value-of select="images/name" />
un attribut à un élément </xsl:attribute>
</picture>
Nom calculé
<xsl:attribute name=“name“
<xsl:element name = "QQQ" >
<!-- Attribute value: template -->
<xsl:attribute name = "xxx" >111</xsl:attribute>
</xsl:attribute>
<xsl:attribute name = "{name(*[1])}" >
<xsl:value-of select = "//BBB" />
</xsl:attribute>
</xsl:element> Attribut value template
Exemple
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml"/>
<xsl:template match="*">
Eléments acceptables
<xsl:element name="{name(.)}">
<xsl:for-each select="@*">
<xsl:attribute name="{name(.)}">
au niveau global
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Elimination
des namespaces
pi et comments
3
2/10/2009
Eléments globaux
xsl:import
xsl:include
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:key Variables
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template
Variables Variables
• Une variable x est déclarée avec:
<xsl:variable name="x" select="p"/>
où p est une expression XPATH. • Il n’est pas possible de changer la
valeur d’une variable (immutable).
• La valeur de x est obtenue avec $x. • Une variable peut contenir une chaîne de
• Portée: Une variable est soit globale, soit caractère ou une structure XML (arbre)
local (à l’intérieur d’un template).
• Contenu: précisé avec l’attribut select ou à
l’intérieur de l’élément.
4
2/10/2009
Exemples Exemples
<xsl:variable name=“site”
select= "http://yoda.inrialpes.fr/tp12.xml"/> • Utilisation des variables
<xsl:for-each select="$features">
Limitations du type ID
• Les attributs ID doivent être déclarés
dans une DTD
Références et clés • L'ID d'un élément ne peut être spécifié
que dans un attribut.
xsl:key • Un élément peut avoir au plus un ID.
• Un élément au plus peut avoir un ID
particulier.
5
2/10/2009
<records>
• la valeur de la clé (une chaîne de
caractères)
<contact id="01"> …</contact> Contacts ayant nom
<contact id="02"> …</contact> le même nom
... Application: text nodeset
</records>
un nœud ne peut appartenir qu’à une seule image
<persons>
<xsl:key name="preg"
<person name="Tarzan"
match="person"
id="050676"/>
use="@id"/><person name="Donald" id="070754"/> <person name="Dolly" id="231256"/> </persons>
6
2/10/2009
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:key name="preg" match="person" use="@id"/><xsl:template match="/"> <html> <body> <xsl:for-each select="key('preg','050676')"> <p> Id: <xsl:value
Modes
Raison d’être :
un même noeud peut être traité plusieurs fois.
Exemple :
• On parcourt tous les chapitres et sections d’un
livre pour produire une table des matières. On
les parcourt à nouveau pour publier le contenu.
• Donc il faut des règles différentes s’appliquant
aux même noeuds : on les distingue par le
mode.
7
2/10/2009
Instruction itérative
<xsl:for-each select=”node-set-expression”>
Instructions XSLT <!-- Content: template -->
</xsl:for-each>
if
<xsl:for-each select="catalog/cd">
for-each <xsl:sort select="artist"/>
<tr>
choose & when <td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
8
2/10/2009
Exemple
<xsl:choose>
<xsl:when test="$closed = 1">
<path d="{$path} Z"/>
</xsl:when>
<xsl:otherwise>
Modularité
<path d="{$path}" style="fill:none"/>
</xsl:otherwise>
</xsl:choose>
9
2/10/2009
Utilisation
<?xml-stylesheet type=”text/xsl” href=”feuille.xsl”?>
<book>
<title> les misérables </title>
<author> Victor hugo </author>
<price> 12 </price>
Programmation
</book>
Certains navigateurs acceptent d’appliquer la transformation
procédurale
xslt référencée qui génère du html avant de procéder à
l’affichage
10
2/10/2009
11
2/10/2009
<!-- render a "feature", a simple polygon that is either open or closed -->
<xsl:template name="render-feature">
12
2/10/2009
13