2011-11-02 10 views
2

je testais sur l'identité de transformation XSLT et j'ai donc choisi au hasard l'exemple suivant sur www.w3schools.com parce qu'il me permet d'essayer en ligne:identité transformation XSLT

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_apply

J'ai changé le XSLT dans le volet droit à transformer identité:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

Et essayé. Ce que j'ai trouvé, c'est que les nœuds /catalog/cd/title ne sont pas copiés dans la sortie (mais tout le reste le fait). Si je change le nom de /catalog/cd/title en /catalog/cd/title1 (ou n'importe quel autre nom) il copie le noeud. Donc je me demandais s'il y avait juste un bogue dans l'implémentation de XSLT sur www.w3schools.com ou s'il y a une signification spéciale pour le noeud XML 'title' qui ne le copie pas? Je prévois d'utiliser la transformation XSLT comme décrit ci-dessus, mais je veux être sûr que je suis au courant de toutes les gotchas ...

Répondre

4

Cet outil w3schools est utile pour tester la transformation XML vers HTML lorsqu'il essaie de rendre le résultat de la transformation au format HTML dans le navigateur. Avec votre transformation d'identité, vous ne créez aucun code HTML mais plutôt XML. Seul l'élément "title" du résultat de la transformation ressemble au navigateur en tant qu'élément HTML connu mais mal placé, de sorte qu'il ne l'affiche pas dans la page. Tous les autres éléments sont inconnus, de sorte que leur contenu textuel est rendu.

Fondamentalement procurez-vous un processeur XSLT autonome ou un éditeur XML, que l'outil w3schools n'est pas utile pour déboguer et tester autre chose que des transformations XML vers HTML.

1

Cela fonctionne très bien en utilisant xsltproc sur Debian.

Mise à jour: fonctionne aussi à l'aide Saxonne-XLST ...

Le problème devrait être la mise en œuvre scolaire W3C ...

mise à jour après la réponse de Martin: euh ... Pas de problème, mais seulement xml à la conversion html ... Il est temps que je m'arrête pour la journée? ;)

+0

ah merci je n'étais pas au courant de xsltproc jusqu'à maintenant! – Kevin

+0

Vous pouvez également utiliser saxon-xslt (en fonction de la cible). Ce sont mes favoris avec saxonb pour XSLT2. – Renaud

1

Je ne peux pas reproduire votre résultat, mais cela dépend du navigateur. Ce que vous avez oublié, c'est que la page rend le résultat de la transformation comme s'il s'agissait de HTML, ce qui n'est pas le cas dans votre cas. Exactement ce que les navigateurs font avec XML qui utilise des balises non-HTML est susceptible d'être imprévisible.

+0

+1 juste pour l'implémentation de Saxon !!! ;) – Renaud

0

Je sais que c'est vieux poste, mais je n'ai pas vu la bonne réponse ici.

<xsl:copy> 

des espaces de noms du nœud en cours sont automatiquement copiés ainsi, mais nœuds enfants et les attributs du nœud en cours ne sont pas automatiquement copiés!

<xsl:copy-of> 

des espaces de noms, les nœuds enfants, et les attributs du nœud en cours sont automatiquement copiés aussi!