Menu xml+xslt

Résolu
Pkpo Messages postés 3 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 13 juin 2006 - 8 juin 2006 à 11:37
Pkpo Messages postés 3 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 13 juin 2006 - 13 juin 2006 à 20:47
Bonjour, j'ai fait un menu en xml que je transforme en html grace à du xslt :
Mon fichier xml:

<?xml version="1.0" encoding="utf-8" ?>
<Map>
  <NoeudP menu="ssmenu0" title="Navigation">Navigation
    <NoeudS url="Accueil.aspx">Accueil</NoeudS>
    <NoeudS url="Contact.aspx">Contact</NoeudS>
  </NoeudP>

  <NoeudP menu="ssmenu1" title="Menu1">Menu1
    <NoeudS url="blabla1.aspx" >Notre Offre</NoeudS>
    <NoeudS url="Procede.aspx">Procede</NoeudS>
  </NoeudP>

  <NoeudP menu="ssmenu2" title="Menu2">Menu2
    <NoeudS url="blabla2.aspx">Notre Offre</NoeudS>
    <NoeudS url="Procede.aspx">Procede</NoeudS>
  </NoeudP>

  <NoeudP menu="ssmenu3" title="Menu3"> Menu3
    <NoeudS url="blabla3.aspx">Notre Offre</NoeudS>
    <NoeudS url="Procede.aspx">Procede</NoeudS>
  </NoeudP>
</Map>

Mon fichier xsl :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="Map/NoeudP">
     
        <xsl:attribute name="href">javascript:menuxaxa('<xsl:value-of select="@menu" />')</xsl:attribute>
          <xsl:value-of select="@title" />
       
     

     
        <xsl:attribute name="id">
          <xsl:value-of select="@menu" />
        </xsl:attribute>
        <xsl:for-each select="NoeudS">
          <li>
            <xsl:attribute name="href"><xsl:value-of select="@url" /></xsl:attribute>
              <xsl:value-of select="."/>
           
          </li>
        </xsl:for-each>
     
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Et au final, dans ma page je mets ceci :

Donc jusqu'ici tout va bien, la transformation se fait bien, mais j'aurais voulut pouvoir indiquer à l'utilisateur sur quelle page il se trouve,  en faisant un <li class="selected">pour la page selectionnée, puis avec les modifs qui vont bien en css. Et donc j'aurais voulut savoir comment faire. Recuperer l'url courante ok mais comment faire ? Dire à xslt de modifier en conséquence ? parcourir le fichier xml en comparant les url avec l'url courante, le modifier et faire un if(suivant Propriété du NoeudP) dans le xslt ? Voilà, c'est la première fois que je touche à du xml (pareil pour l'asp.net :) et je sais trop comment m'y prendre..... En vous remerciant d'avance, bonne journée !

3 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juin 2006 à 13:53
Bonjour,

je pense que : http://www.aspfr.com/codes/EXECUTER-SCRIPT-VB-NET-LORS-TRANSFORMATION-XSLT_34008.aspx devrait t'aider pour récuperer l'url courante utilise

system.web.httpcontext.current.request.url

<hr />Cyril - MVS - MCP
3
Pkpo Messages postés 3 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 13 juin 2006
8 juin 2006 à 14:19
Ok, je savais pas qu'on pouvait faire ça, la prochaine fois je serais plus curieux en mattant les codes sources :). Pour ceux que ça interresse j'ai trouvé ça aussi : http://www.codeproject.com/aspnet/xsltmenu.asp. Bon j'vais tester tout ça et merci encore !
0
Pkpo Messages postés 3 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 13 juin 2006
13 juin 2006 à 20:47
Je reviens pour mettre la solution que j'ai prise, j'ai créé un paramètre dans le fichier xslt que je modifie dans le code behind de ma master page.

Dans masterpage.master, dans le Page_Load :

string lurl = System.Web.HttpContext.Current.Request.RawUrl.ToString();
        XsltArgumentList xal = new XsltArgumentList();
        xal.AddParam("currenturl","", lurl);
        Xml1.TransformArgumentList = xal;

et dans le fichier xslt on rajoute :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="currenturl" />
......
 <xsl:for-each select ="NoeudS">
          <xsl:choose>
            <xsl:when test="@url=$currenturl">
              <li><xsl:attribute name="id">selec</xsl:attribute>
                <xsl:value-of select="."/>
              </li>
            </xsl:when>
            <xsl:otherwise>
              <li>
               
                  <xsl:attribute name="href">
                    <xsl:value-of select="@url" />
                  </xsl:attribute>
                  <xsl:value-of select="."/>
               
              </li>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>

......

Voilà. J'ai essayer en executant du code .net, j'y suis parvenu mais j'ai eut quelque soucis ...... :
http://www.microsoft.com/france/communautes/webnews/msdn/default.mspx?dg=microsoft.public.fr.dotnet.aspnet&lang=fr&cr=FR&r=faf84066-da40-49ce-b831-4725688265a1
Bonne soirée à tous.
0
Rejoignez-nous