Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Xml Regroupements en XSLT
Le regroupement en XSLT 2.0 se fait essentiellement via la boucle/élément <xsl:for-each-group><ref>14.3 The xsl:for-each-group Element dans la Spécification XSLT2.0 du W3C</ref>.
Cette balise peut prendre divers paramètres que nous allons tenter d'expliquer à l'aide d'exemples<ref>Page d'exemples sur xml.com</ref> (les exemples sont issus du site xml.com).
group-by: grouper par paramètre
[modifier | modifier le wikicode]Le paramètre group-by permet le plus souvent de regrouper des nœuds qui ont paramètres communs.
XML d'entrée
[modifier | modifier le wikicode]<files>
<file name="swablr.eps" size="4313" project="mars"/>
<file name="batboy.wks" size="424" project="neptune"/>
<file name="potrzebie.dbf" size="1102" project="jupiter"/>
<file name="kwatz.xom" size="43" project="jupiter"/>
<file name="paisley.doc" size="988" project="neptune"/>
<file name="ummagumma.zip" size="2441" project="mars"/>
<file name="schtroumpf.txt" size="389" project="mars"/>
<file name="mondegreen.doc" size="1993" project="neptune"/>
<file name="gadabout.pas" size="685" project="jupiter"/>
</files>
Feuille XSL
[modifier | modifier le wikicode]<xsl:template match="files">
<xsl:for-each-group select="file" group-by="@project">
<xsl:value-of select="current-grouping-key()"/>:
<xsl:for-each select="current-group()">
<xsl:value-of select="@name"/>, <xsl:value-of select="@size"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>average size for </xsl:text>
<xsl:value-of select="current-grouping-key()"/>
<xsl:text> group: </xsl:text>
<xsl:value-of select="avg(current-group()/@size)"/>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
Sortie
[modifier | modifier le wikicode]mars: swablr.eps, 4313 ummagumma.zip, 2441 schtroumpf.txt, 389 average size for mars group: 2381 - neptune: batboy.wks, 424 paisley.doc, 988 mondegreen.doc, 1993 average size for neptune group: 1135 - jupiter: potrzebie.dbf, 1102 kwatz.xom, 43 gadabout.pas, 685 average size for jupiter group: 610
group-adjacent : grouper grâce aux voisins
[modifier | modifier le wikicode]Le paramètre group-adjacent permet de regrouper la sélection a l'aide de ses voisins s'il possède les mêmes critères de regroupement. Sinon un nouveau groupe est créé. Pour simplifier le regroupement, on crée un groupe avec le nœud courant, on regarde si le nœud suivant possède le même paramètre de regroupement, si oui on le garde dans notre groupe sinon on crée un nouveau groupe.
XML d'entrée
[modifier | modifier le wikicode]<files>
<file name="swablr.eps" size="4313" project="mars"/>
<file name="batboy.wks" size="424" project="neptune"/>
<file name="potrzebie.dbf" size="1102" project="jupiter"/>
<file name="kwatz.xom" size="43" project="jupiter"/>
<file name="paisley.doc" size="988" project="neptune"/>
<file name="ummagumma.zip" size="2441" project="mars"/>
<file name="schtroumpf.txt" size="389" project="mars"/>
<file name="mondegreen.doc" size="1993" project="neptune"/>
<file name="gadabout.pas" size="685" project="jupiter"/>
</files>
Feuille XSL
[modifier | modifier le wikicode]<xsl:template match="files">
<xsl:for-each-group select="file" group-adjacent="@project">
<xsl:for-each select="current-group()">
<xsl:value-of select="@name"/>, <xsl:value-of select="@size"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
Sortie
[modifier | modifier le wikicode]swablr.eps, 4313 - batboy.wks, 424 - potrzebie.dbf, 1102 kwatz.xom, 43 - paisley.doc, 988 - ummagumma.zip, 2441 schtroumpf.txt, 389 - mondegreen.doc, 1993 - gadabout.pas, 685
group-starting-with : débuter un groupe à chaque occurence d'un pattern
[modifier | modifier le wikicode]Le paramètre group-starting-with permet de regrouper à l'aide de patterns.
On crée un nouveau groupe avec le premier nœud qui correspond au paramètre de regroupement.
Un nouveau groupe sera créée seulement si un nouveau nœud de la sélection correspond à ce paramètre de regroupement. Les autres nœuds de la sélection ne correspondant pas à ce paramètre seront inclus dans le groupe courant.
XML d'entrée
[modifier | modifier le wikicode]<html>
<body>
<h1>Loomings</h1>
<p>par 1</p>
<p>par 2</p>
<p>par 3</p>
<h1>The Whiteness of the Whale</h1>
<p>par 4</p>
<p>par 5</p>
<p>par 6</p>
</body>
</html>
Feuille XSL
[modifier | modifier le wikicode]<xsl:template match="body">
<body>
<xsl:for-each-group select="*" group-starting-with="h1">
<chapter>
<xsl:for-each select="current-group()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:for-each>
</chapter>
</xsl:for-each-group>
</body>
</xsl:template>
Sortie XML
[modifier | modifier le wikicode]<html>
<body>
<chapter>
<h1>Loomings</h1>
<p>par 1</p>
<p>par 2</p>
<p>par 3</p>
</chapter>
<chapter>
<h1>The Whiteness of the Whale</h1>
<p>par 4</p>
<p>par 5</p>
<p>par 6</p>
</chapter>
</body>
</html>
group-ending-with : terminer un groupe à chaque occurence d'un pattern
[modifier | modifier le wikicode]Le paramètre group-ending-with permet de regrouper à l'aide de patterns.
On crée un nouveau groupe avec le premier nœud de la sélection.
Ce groupement NE se termine que si l'on tombe sur un nœud qui correspond au pattern. Dans ce cas, un nouveau groupe est créée avec le nœud suivant. Les autres nœuds de la sélection ne correspondant pas à ce paramètre seront inclus dans le groupe courant.
Références
[modifier | modifier le wikicode]- xslt for-each-group question @ StackOverflow
<references/>