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

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
ultrafil
Arias
Messages : 3
Inscription : 28 août 2008, 14:32

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

Message 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)
Dernière modification par ultrafil le 29 août 2008, 23:16, modifié 1 fois.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Message 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).
« La vie d’un geek est un combat perpétuel contre l’imperfection »
ultrafil
Arias
Messages : 3
Inscription : 28 août 2008, 14:32

Message 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
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
ultrafil
Arias
Messages : 3
Inscription : 28 août 2008, 14:32

Message 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
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités