[XSL] Déplacement de l'information
.
J'ai un fichier XML qui me sert de template : il contient une page XHTML et un peu plus loin les données à replacer.
Code:
1 2 3 4 5 6 7 8 9 10
| <page>
<html>
<head><titre><mova:titre /></titre></head>
<body>...</body>
</html>
<mova:titre>leTitre</mova:titre>
</page> |
Maintenant voici le fichier XSL. Il est un peu compliqué, mais les lignes qui me posent problème sont indiqué par "$$$".
Le code HTML est recopié sans problème. Mais lorsque je rencontre un tag à remplacer, ça ne va plus :
Code:
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
| <?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml" exclude-result-prefixes="html"
xmlns:mova="http://dynip.org/mova"
>
<xsl:output
method="xml"
indent="yes"
omit-xml-declaration="yes"
encoding="ISO-8859-1"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
/>
<!-- ici on recopie le code html du tag /page/html vers la sortie -->
<xsl:template match="/page/html:html//html:*">
<xsl:element name="{local-name()}">
<xsl:for-each select="attribute::*">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:for-each>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- ici, on est sensé remplacer les appels /page/html//mova:toto par
les données /page/mova:toto.
local-name() c'est justement "toto" -->
<xsl:template match="/page/html:html//mova:*">
<xsl:value-of select="concat('/page/mova:', local-name())" /> fache $$$1$$$
</xsl:template>
<xsl:template match="/page/mova:*"></xsl:template> fache $$$2$$$
<!-- Ceci recopie les commentaires -->
<xsl:template match="comment()">
<xsl:copy />
</xsl:template>
</xsl:stylesheet> |
J'ai deux problèmes :
§§1§§ : Dans le select, il y a un string, il est donc recopié tel-quel et ce n'est pas ce que je veux. Pourtant je dois bien recopier le local-name() du contexte courant pour que <mova:toto /> dans html aille cherche le contenu de <mova:toto>contenu</mova:toto>
§§2§§ : Sans cette ligne, le contenu de <mova:toto> est recopié dans la sortie. Or selon moi je ne lui ai jamais demandé de le faire.
Cette ligne, dont j'aimerais me passer, permet donc d'annuler la sortie.
Quelqu'un peut-il m'aider ?
Précision :
Un exemple particulier qui marche :
Code:
1 2 3
| <xsl:template match="/page/html:html//mova:toto">
<xsl:value-of select="/page/mova:toto" />
</xsl:template> |
Mais je n'arrive pas à généraliser :
Code:
1 2 3
| <xsl:template match="/page/html:html//mova:*">
<xsl:value-of select="concat('/page/mova:', local-name())" />
</xsl:template> |