TUTORIELS 
XSLT : modifier la structure d'un document XML

Page 1 | 2

XSL permet de répondre rapidement aux problèmes d'évolution des formats XML... Démonstration par l'exemple.
 (15 janvier 2004)
 
Pour vérifier la sortie, nous avons utilisé le freeware XSLDebugger.

Voici notre fichier XSL :
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />
  <xsl:template match="/developpeur/rss/channel">
    <feed version="0.3" xmlns="http://purl.org/atom/ns#">
      <title><xsl:value-of select="title" /></title>
      <link rel="alternate" type="text/html" href="{link}" />
      <modified><xsl:value-of select="lastBuildDate" /></modified>
      <author>
        <name><xsl:value-of select="webMaster" /></name>
      </author>
      <xsl:for-each select="item">
        <entry>
          <title><xsl:value-of select="title" /></title>
          <link rel="alternate" type="text/html" href="{link}" />
          <summary type="text/plain"><xsl:value-of select="description" /></summary>
          <modified><xsl:value-of select="pubDate" /></modified>
        </entry>
      </xsl:for-each>
    </feed>
  </xsl:template>
</xsl:stylesheet>

Forums
* Discutez en sur les forums

Modifier la structure d'un document XML suppose une solution unique : il est peu probable que vous puissez adapter notre code à d'autres documents (hors RSS).
Comme vous pouvez le remarquer, la restructuration se fait de manière très itérative : notre feuille XSL tourne essentiellement autour de xsl:value-of et d'une boucle xsl:for-each. Cela est dû au fait que nous reconstruisons littéralement le fichier XML, en ne gardant que le contenu des balises du fichier d'origine...

Notons tout d'abord l'utilisation de xsl:output method="xml", qui comme son nom l'indique force le type du fichier en sortie.
La suite de notre construction est ensuite relativement simple : on insère autour de nos balises Atom les codes XSL qui permettent de retrouver le contenu des balises RSS...
Précisons l'utilité de la construction XSL {nomDeLaBalise}, qui permet d'appeler directement le contenu d'une balise sans devoir faire appel à une construction XSL plus lourde. Sans cela, nous aurions dû, pour la balise <link>, faire appel à un constructeur de balise, tel que :

<xsl:element name="link" use-attribute-sets="attriblink" />

...qui lui-même ferait appel à...

<xsl:attribute-set name="attriblink">
  <xsl:attribute name="rel">alternate</xsl:attribute>
  <xsl:attribute name="type">text/html</xsl:attribute>
  <xsl:attribute name="href"><xsl:value-of select="link" /></xsl:attribute>
</xsl:attribute-set>

Nous gagnons donc beaucoup à faire un simple appel comme suit
<link rel="alternate" type="text/html" href="{link}" />

Page 1 | 2

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page