Transformations XSLT
Published by balno on Saturday, August 8, 2009 - 01:42:57
Informatique, Programmation Web
Je suis sur un chantier de création d'outils pour améliorer l'indexation matière dans notre catalogue. J'ai terminé une librairie Javascript sur mesure pour la gestion des fichiers XML et leur transformation XSLT.
Un petit exemple :
Fichier XML à transformer :
<?xml version="1.0" encoding="UTF-8"?> <content> <item id="1" name="Animaux"> <item id="2" name="Familiers"> <item id="3" name="Chats" ></item> <item id="4" name="Chiens" ></item> <item id="5" name="Hamsters"></item> </item> <item id="6" name="Sauvages"> <item id="7" name="Lion"></item> <item id="8" name="Girafe"></item> <item id="9" name="Poissons"> <item id="10" name="Thon"></item> <item id="11" name="Cabillaud"></item> <item id="12" name="Raie"> <item id="18" name="Manta"></item> </item> </item> </item> <item id="13" name="Escargot"></item> </item> <item id="14" name="Moyens de transport"> <item id="15" name="Voiture"></item> <item id="16" name="Train"></item> </item> <item id="19" name="bateau"></item> <item id="17" name="programmation PHP"></item> </content>
Feuille de style XSL :
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" /> <xsl:template match="content"> <div class="content"> <xsl:apply-templates select="item"> <xsl:sort select="@name" data-type="text" order="ascending" /> </xsl:apply-templates> </div> </xsl:template> <xsl:template match="item"> <div> <xsl:attribute name="class">item</xsl:attribute> <xsl:attribute name="id">item<xsl:value-of select="@id" /></xsl:attribute> <xsl:choose> <xsl:when test="node()"> <img> <xsl:attribute name="src">images/folder.gif</xsl:attribute> <xsl:attribute name="id">img<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="onclick">toggleItem(<xsl:value-of select="@id" />);</xsl:attribute> </img> <a> <xsl:attribute name="href">javascript:void(0)</xsl:attribute> <xsl:attribute name="onclick">clickItem(<xsl:value-of select="@id" />);</xsl:attribute> <xsl:attribute name="id">link<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="class">unselected</xsl:attribute> <xsl:value-of select="@name" /> </a> <div> <xsl:attribute name="id">itemContent<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="style">display:none</xsl:attribute> <xsl:apply-templates select="item"> <xsl:sort select="@name" data-type="text" order="ascending" /> </xsl:apply-templates> </div> </xsl:when> <xsl:otherwise> <img><xsl:attribute name="src">images/item.gif</xsl:attribute></img> <a> <xsl:attribute name="href">javascript:void(0)</xsl:attribute> <xsl:attribute name="onclick">clickItem(<xsl:value-of select="@id" />);</xsl:attribute> <xsl:attribute name="id">link<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="class">unselected</xsl:attribute> <xsl:value-of select="@name" /> </a> </xsl:otherwise> </xsl:choose> </div> </xsl:template> </xsl:stylesheet>
Rendu dans une page WEB :