Affichage d'une arborescence
Bonjour,
je me lance dans le xsl (enfin j'en avais fait un tout petit peu il y a quelques années mais depuis ma mémoire a été effacée)
J'ai un fichier xml de type arborescence
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<folder name="RH" order="2">
<application>
<url>http://urlftcarto.com/test1?test=1&test=2&test=3</url>
<role>role 1</role>
<name>test 1</name>
<customname></customname>
<basicat>TST1</basicat>
<icon></icon>
</application>
<application>
<url>http://urlftcarto.com/test2</url>
<role>role 2</role>
<name>test 2</name>
<customname></customname>
<basicat>TST2</basicat>
<icon></icon>
</application>
</folder>
<folder name="Group 1">
<folder name="Group 11">
<folder name="Group 111">
</folder>
<application>
<url>http://urlftcarto.com/test4</url>
<role>role 4</role>
<name>test 4</name>
<customname>My new Application</customname>
<basicat>TST4</basicat>
<icon></icon>
</application>
</folder>
<application>
<url>http://urlftcarto.com/test3</url>
<role>role 3</role>
<name>test 3</name>
<customname>My Application</customname>
<basicat>TST3</basicat>
<icon></icon>
</application>
</folder>
</root> |
En gros, il peut y avoir des folders dans des folders sans limite particulière
Je veux afficher cela à l'écran via des ul et li (ce qui me parait le plus pertinent)
J'ai actuellement un xsl qui ressemble à cela
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
<xsl:template match="/">
<div>
<p>Liste folder</p>
<ul>
<xsl:apply-templates select="root/folder" />
</ul>
</div>
</xsl:template>
<xsl:template match="folder">
<li>
<xsl:value-of select="@name" />
<ul>
<xsl:apply-templates select="folder" />
<xsl:apply-templates select="application" />
</ul>
</li>
</xsl:template>
<xsl:template match="application">
<li>
<xsl:value-of select="url" />
</li>
</xsl:template>
</xsl:stylesheet> |
Jusqu'ici tout va bien.
Mais j'aimerais gérer une notion d'ordre à la manière des favoris des navigateurs. Entre les folders, entre les applications mais aussi entre folder et application qui sont sur le même niveau.
Avez-vous des idées pour faire cela ? De la réorganisation dans mon xml (utiliser une structure mère qui contient l'ordre et qui aura ensuite des fils de type folder ou application ?) ?
J'ai l'impression aussi qu'il me faudra me passer des xsl:apply-templates pour aller vers des foreach mais quid de la récursivité que j'ai facilement ici avec
Code:
1 2 3 4 5 6 7 8 9
| <xsl:template match="folder">
<li>
<xsl:value-of select="@name" />
<ul>
<xsl:apply-templates select="folder" />
<xsl:apply-templates select="application" />
</ul>
</li>
</xsl:template> |
Merci d'avance de votre aide