Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Xml Regroupements en XSLT

De AJLSM
(Redirigé depuis XML Regroupements en XSLT)
Aller à la navigation Aller à la recherche

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.

<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>
<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>
 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.

<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>
<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>
 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.

<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>
<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>
<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.

<references/>