Voici mon fichier XML : (version simplifiée plus bas)

<?xml version="1.0" ?>

<page xmlns:mova="http://dynip.org/mova">

<html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="fr">
    <head>
      <title><mova:titre /></title>
      <meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
      <style type="text/css">
      #smile {width: 100px;border: 1px solid black;}
      </style>
    </head>

    <body>

    <mova:exemple /><br/>

    <!-- ttt -->

    <h1>Exemple</h1>

    <h2>Présentation</h2>

    <p>Il s'agit d'un exemple d'utilisation.</p>
    <img id="smile" src="greg.jpg" alt="cheep smile" />
    <p>Les images sont prises avec le bon chemin.</p>

    </body>
</html>


<mova:titre>Le titre de la page</mova:titre>
<mova:exemple>--oOo--</mova:exemple>

</page>




Ce qu'il faut voir :


<page>
    <html>
        <head><titre><mova:titre /></titre></head>
        <body>...</body>
    </html>
    <mova:titre>leTitre</mova:titre>
</page>



Les tags du spacename mova sont un appel lorsqu'ils sont dans html

Evidement je veux recopier mes "données" à la bonne "place"

Voici mon fichier XSL :


<?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 ?
Modifié par Fredooo (08 Mar 2005 - 19:17)