IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

XmlDocument et xslTransform


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut XmlDocument et xslTransform
    Bonjour,

    dans le cadre d'un prototype de gestion de menu dynamique, j'ai un fichier xml décrivant mon menu du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <monMenu>
       <menu id="menu0" class="menuZero" text="Menu" href=""></menu>
       <menu id="menu1" class="menu" text="Help" img="HLP.gif" href=""></menu>
       <menu id="menu2" class="menu" text="Application List" img="TXT.gif" href="ListSer.aspx"></menu>
       <menu id="menu3" class="menu" text="Current Application" img="folder_closed.gif" href="">
          <sousmenu txt="Monitoring Request List" img="TXT.gif" href=""></sousmenu>
          <sousmenu txt="Details" img="loupe.gif" href=""></sousmenu>
       </menu>
       <menu id="menu4" class="menu" text="Insert Test" img="folder_closed.gif" href=""></menu>
       <menu id="menu5" class="menu" text="Administration" img="folder_closed.gif" href="">
          <sousmenu txt="Hosts" img="TXT.gif" href=""></sousmenu>
          <sousmenu txt="Users" img="TXT.gif" href=""></sousmenu>
       </menu>
    </monMenu>
    Suivant les droits de l'utilisateur et la page en cours de l'application, certains items doivent être invisible.
    Ce que j'ai fait actuellement est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    XmlDocument menu = new XmlDocument();
     
             // CHARGER le menu total
             menu.Load(@"D:\wwwroot\webGRAM\Solution\WebGRAM\StaticFiles\Menu\menu.xml");
     
             // GERER les droits
             if (!pIsAdmin)
             {
                menu.FirstChild.RemoveChild(menu.FirstChild.SelectSingleNode(String.Format("descendant::menu[@text='{0}']",Presentation.MenuEntry.MENU_ADMI)));
             }
     
             // GERER les pages
             switch (pPage)
             {
                case Presentation.Pages.PAGE_ListSer:
                   menu.FirstChild.RemoveChild(menu.FirstChild.SelectSingleNode("descendant::menu[@text='Current Application']"));
                   menu.FirstChild.RemoveChild(menu.FirstChild.SelectSingleNode("descendant::menu[@text='Insert Test']"));
                   break;
                default:
                   break;
             }
    Mon souci désormais est d'utiliser une transformation xsl pour générer un code html qui sera inclus dans ma page pour la gestion du menu.
    Seulement la classe XslTransform prend uniquement un XPathDocument en paramètre ou une url.

    Avez-vous une idée pour transformer mon xmldocument en xpathdocument ?

    merci de votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Seulement la classe XslTransform prend uniquement un XPathDocument en paramètre ou une url.
    Comment ça ? De quelle méthode tu parles ?

    Transform accepte un String, un XPathNavigator ou un IXPathNavigable. XmlDocument implémente IXPathNavigable, donc c'est un paramètre valide pour la méthode Transform...

  3. #3
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    En .Net 3.5 la fonction Transform ne prend pas de xmlDocument en paramètre.

    J'ai du passer par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    XPathDocument xpathDoc = new XPathDocument(new XmlNodeReader(menu));
    XslTransform myXslTrans = new XslTransform();
    myXslTrans.Load(@"D:\wwwroot\webGRAM\Solution\WebGRAM\StaticFiles\Menu\menu.xslt");
     
    XmlReader reader = myXslTrans.Transform(xpathDoc, null, new XmlUrlResolver());
     
    XmlDocument doc = new XmlDocument();
    doc.Load(reader);
    Je regarderais éventuellement via le IXPathNavigable.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    En .Net 3.5 la fonction Transform ne prend pas de xmlDocument en paramètre.
    Ben si, puisqu'elle prend un IXPathNavigable...

  5. #5
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Je viens de reprendre le sujet.
    J'ai le code ci-dessous
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // CHARGER le fichier xsl
             XPathDocument xpathDoc = new XPathDocument(new XmlNodeReader(menu));
             // XslTransform est deprecated mais XslCompiledTransform ne permet pas de retourner un XmlReader
             XslTransform myXslTrans = new XslTransform();
             myXslTrans.Load(urlXsl);
     
             XmlReader reader = myXslTrans.Transform(xpathDoc, null, new XmlUrlResolver());
             XmlDocument doc = new XmlDocument();
             doc.Load(reader);
     
             return doc;

    Je ne vois vraiment pas comment passer par un XslCompiledTransformed.

  6. #6
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Bon ben finalement je viens de trouver un article

    si ça peut aider voilà la solution
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    XmlDocument doc = new XmlDocument();
     
    // CHARGER le fichier xsl
    XPathDocument xpathDoc = new XPathDocument(new XmlNodeReader(menu));
     
    XslCompiledTransform transformer = new XslCompiledTransform();
    transformer.Load(urlXsl);
     
    using (XmlWriter xmlWriter = doc.CreateNavigator().AppendChild())
    {
       transformer.Transform(new XmlNodeReader(menu), null, xmlWriter);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. XMLDocument
    Par Hypollite76 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 05/01/2006, 18h16
  2. Réponses: 3
    Dernier message: 17/11/2005, 15h41
  3. [C#] transformer un XmlDocument en une string
    Par kaboume dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/06/2005, 11h49
  4. Exemple d'utilisation de XMLDocument
    Par Mickey.jet dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2005, 19h51
  5. [XMLDocument] Violation d'accès
    Par xant dans le forum Composants VCL
    Réponses: 8
    Dernier message: 29/09/2004, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo