Page 1 sur 1

[Résolu] conformité XSL de copy-of

Publié : 28 août 2008, 14:49
par ultrafil
Bonjour à tous,

je suis en train de monter un site basé sur [xml+xsl->xhtml] et je viens de m'apercevoir que firefox et opera n'implémentent pas la balise xsl:copy-of de la même manière que IE6 et java5.

En effet firefox et opera ne copient que le contenu de l'élement copier, alors que IE6 ou le parser de java5 eux recopient non seulement le contenu mais aussi l'élément lui même.

J'ai regardé sur la définition de la norme du W3C et de ce que je comprend xsl:copy-of devrait recopier toute la balise et pas seulement son contenu.

Ce qui me semble bizard c'est que Opera et Firefox est le même comportement, peut etre y a t-il une raison, en attendant ca me pose un problème car je me retrouve avec des doublons d'ID dans ma source XHTML sous IE6.

Je voulais en parler ici avant d'ouvrir un bug chez Gecko et Opera pour avoir votre avis sur ce problème.

Cdt,
Philippe

liens: http://www.w3.org/TR/xslt#copy-of


Message envoyé avec : Opera/9.26 (Windows NT 5.0; U; en)

Publié : 28 août 2008, 19:37
par Benoit
Est-ce que tu pourrais donner un lien vers tes fichiers (ou une version réduite démontrant le problème) ?

Ça fait longtemps que je n'ai pas touché à XSL, mais je soupçonne un problème dans la syntaxe du select (par exemple dans la casse des caractères) ou dans les espaces de noms.

Publié : 29 août 2008, 00:26
par Bobe
Normalement, ça doit recopier l’élément, pas seulement son contenu (sinon, il suffirait de faire <xsl:copy-of select="text()"/> je crois).

Publié : 29 août 2008, 16:20
par ultrafil
Enregistre c'est deux fichiers en local et ouvre les avec firefox et IE. Si tu enleve la div explanation du xsl il n'y a plus de bordure sous firefox car la balise n'est pas recopiée.

J'aimerais avoir le même comportement sur IE, firefox et Opera.

voici le fichier test.xml réduit:

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<xhtml>
  <head>
  </head>
  <body>    
    <div id="supportingText">
      <div id="explanation">
        <h3>Xsltop, l'éditeur XSL libre</h3>
        <p>Xsltop est un logiciel libre et opensource sous license GPLv3 qui est entièrement écrit en Java5. Il est destiné aux développeurs XSL et aux étudiants en informatique qui souhaitent tester la famille de technologies XSL. </p>
      </div> <!-- end explanation -->
    </div> <!-- end supportingText -->
  </body>	
</xhtml>
Et voici le fichier test.xsl réduit:

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" media-type="application/xhtml+xml; charset=UTF-8" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" standalone="yes" indent="no" />
<xsl:template match="/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>    
    <title>Xsltop, l'éditeur XSL libre</title>
    <style>
    #explanation {
    border: 1px solid black;
    margin: 5px;
    }
    </style>
  </head>
  <body>    
    <div id="supportingText">      
      <div id="explanation">
      <xsl:copy-of select="body/div/div[@id='explanation']"/>
      </div>
    </div>
  </body>
  </html>
</xsl:template>
      
</xsl:stylesheet>
Cdt,
Philippe

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16

Publié : 29 août 2008, 23:00
par Benoit
OK c'est bien un problème d'espace de noms : les éléments copiés sont dans l'espace de noms nul au lieu de l'espace de noms xhtml. Ça peut se voir avec Firebug ou l'Inspecteur DOM.

Deux solutions sont données dans ce message. Soit il faut explicitement mettre l'attribut xmlns à tes éléments XML, soit utiliser xsl:element avec un template au lieu de xsl:copy-of.

Publié : 29 août 2008, 23:16
par ultrafil
Super, j'avais pensé à un problème d'espace de noms mais je m'y étais mal pris pour le résoudre.

Je viens de tester la solution avec le template et ca marche super bien, ca m'a résolu un autre problème en passant.

Merci!

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.16) Gecko/20080715 Ubuntu/7.10 (gutsy) Firefox/2.0.0.16