Un exemple de xsl avec xsl:key
Bonjour tout le monde,
Je suis débutant en XLM j'essaye de comprendre un exemple de xsl mais j'arrive pas...
Le fichier xml:
Code:
1 2 3 4 5 6
| <?xml version="1.0" encoding="utf-8"?>
<ts>
<t id="t1">T1</t>
<t id="t2" ref="t1">T2</t>
<t id="t3" ref="t2">T3</t>
</ts> |
Le premier xsl:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="key" match="t" use="@id"/>
<xsl:template match="/|*|text()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/t[@ref]">
<xsl:copy-of select="key('key',@ref)"/>
</xsl:template>
</xsl:stylesheet> |
il donne le résultat:
Code:
1 2 3 4 5 6
| <?xml version="1.0"?>
<ts>
<t>T1</t>
<t id="t1">T1</t>
<t id="t2" ref="t1">T2</t>
</ts> |
et le seconde xls:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="key" match="t" use="@id"/>
<xsl:template match="/|*|text()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="t[@ref]">
<xsl:apply-templates select="key('key',@ref)"/>
</xsl:template>
</xsl:stylesheet> |
et il donne le résultat:
Code:
1 2 3 4 5 6
| <?xml version="1.0"?>
<ts>
<t>T1</t>
<t>T1</t>
<t>T1</t>
</ts> |
la seule différence entre ces deux xsl c'est le code dans le seconde xsl.apply-templates, mais j'arrive pas à comprendre les résultat sur tout pour
le deuxième il donne partout des T1...
Est-ce que quelqu'un peut m'expliquer?
Merci d'avance pour votre aide.