Menu xml+xslt [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
13 juin 2006
-
Messages postés
3
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
13 juin 2006
-
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

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
3
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
13 juin 2006

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 !
Messages postés
3
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
13 juin 2006

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.