(Re)Bonjour à tous,
J'ai un petit problème avec des noeuds XPath. Voici le problème: j'ai besoin de créer un petit menu, tout simple avec des ul et des li.
Sur mon site, il y a un XML qui contient la structure de mes pages et qui s'appelle topmenu.xml.
Le code de ce xml ressemble à ceci:
Bien sur ce fichier est un fichier EXTERNE, il n'est pas utilisé en tant que tel, mais uniquement au travers de la fonction document().
Maintenant, dans les fichiers XML que j'utilise (qui sont liés à une feuille XSL), y a une petite balise <menudisplay folder="testfolder"/> (testfolder, ou download, etc.. mais pour l'exemple ce sera testfolder), le chemin complet étant root/paragraphs/menudisplay.
Ce que je voudrais c'est afficher un bete menu qui prend tous les link du noeud topmenu/cat[@folder="??"], avec un <xsl:for-each> (dans une feuille xsl donc).
Plus "simplement" un truc du genre:
Bien évidemment ca marche pas. Je précise également que:
ne marche pas non plus, l'attribut select étant obligatoire après for-each (pas détecté en xsl-attribute par le parseur)
J'ai essayé de changer les guillemets, les variables, etc etc... Rien à faire...
Quelqu'un peut m'aider? D'avance merci...
B.O.R.E.T.'
_________________________________________________________
EDIT:
P.S.: voici le code XSL, en l'état actuel et qui ne fonctionne bien évidemment pas, mais c'est peut etre plus clair pour que vous puissiez voir ce que je veux faire:
Modifié par B.O.R.E.T. (13 Jul 2007 - 13:09)
J'ai un petit problème avec des noeuds XPath. Voici le problème: j'ai besoin de créer un petit menu, tout simple avec des ul et des li.
Sur mon site, il y a un XML qui contient la structure de mes pages et qui s'appelle topmenu.xml.
Le code de ce xml ressemble à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<topmenu>
<cat name="Home" href="#"/>
<cat name="Download" folder="download">
<link name="Menu 1" href="#"/>
<link name="Menu 2" href="#"/>
<link name="Menu 3" href="#"/>
<link name="Menu 4" href="#"/>
</cat>
<cat name="Test" folder="testfolder">
<link name="Link 1" href="link1.html">
<sublink name="sublink1" href="#"/>
<sublink name="sublink2" href="http://www.google.fr"/>
<sublink name="sublink3" href="#"/>
</link>
<link name="Link 2" href="link2.html"/>
<link name="Link 3" href="link3.html">
<sublink name="sublink1" href="#"/>
<sublink name="sublink2" href="http://www.google.fr"/>
<sublink name="sublink3" href="#"/>
</link>
</cat>
</topmenu>
Bien sur ce fichier est un fichier EXTERNE, il n'est pas utilisé en tant que tel, mais uniquement au travers de la fonction document().
Maintenant, dans les fichiers XML que j'utilise (qui sont liés à une feuille XSL), y a une petite balise <menudisplay folder="testfolder"/> (testfolder, ou download, etc.. mais pour l'exemple ce sera testfolder), le chemin complet étant root/paragraphs/menudisplay.
Ce que je voudrais c'est afficher un bete menu qui prend tous les link du noeud topmenu/cat[@folder="??"], avec un <xsl:for-each> (dans une feuille xsl donc).
Plus "simplement" un truc du genre:
<ul>In the same category:
<xsl:for-each select="document('topmenu.xml')/topmenu/cat[@folder="<xsl:value-of select='root/paragraphs/menudisplay'/>"]/link">
<li>
<a href="#"><xsl:value-of select="document('topmenu.xml')/topmenu/cat/@name"/></a>
</li>
</xsl:for-each>
</ul>
Bien évidemment ca marche pas. Je précise également que:
<ul>In the same category:
<xsl:for-each>
<xsl:attribute name="select">
document('topmenu.xml')/topmenu/cat[@folder="
<xsl:value-of select='root/paragraphs/menudisplay'/>
"]/link">
<xsl:attribute/>
<li>
<a href="#"><xsl:value-of select="document('topmenu.xml')/topmenu/cat/@name"/></a>
</li>
</xsl:for-each>
</ul>
ne marche pas non plus, l'attribut select étant obligatoire après for-each (pas détecté en xsl-attribute par le parseur)
J'ai essayé de changer les guillemets, les variables, etc etc... Rien à faire...
Quelqu'un peut m'aider? D'avance merci...
B.O.R.E.T.'
_________________________________________________________
EDIT:
P.S.: voici le code XSL, en l'état actuel et qui ne fonctionne bien évidemment pas, mais c'est peut etre plus clair pour que vous puissiez voir ce que je veux faire:
<xsl:template match="root/paragraphs/menudisplay">
<div id="display">
<xsl:choose>
<xsl:when test="./@level='0'">
<!-- Display same level -->
<ul>In the same category:
<xsl:for-each select="document('topmenu.xml')/topmenu/cat[@folder="
<xsl:value-of select='root/paragraphs/menudisplay/@folder'/>"]/link">
<li>
<a><xsl:attribute name="href">
<xsl:value-of select="document('topmenu.xml')/topmenu/cat[@folder="
<xsl:value-of select="root/paragraphs/menudisplay/@folder/>/link/@href"/>
<xsl:attribute/>
<xsl:value-of select="document('topmenu.xml')/topmenu/cat[@folder="
<xsl:value-of select="root/paragraphs/menudisplay/@folder/>/link/@name"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:when>
<xsl:when>
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
Modifié par B.O.R.E.T. (13 Jul 2007 - 13:09)