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 :

Récupérer un ancètre Xpath


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Klivor
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 143
    Par défaut Récupérer un ancètre Xpath
    Bonjour à tous , est -ce que quelqu'un pourrait m'aider à récupérer le nom d'un ancètre dans ce Xpath.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x:viewstruct//x:view/x:view_link//x:retrieve/@viewKey
    Je voudrais récupérer pour le noeud retrieve le nom de son ancétre view .
    Merci de votre aide.

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    En utilisant l'axe ancestor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    XPathDocument doc = new XPathDocument("d:\\configuration.xml");
    XPathNavigator nav = doc.CreateNavigator();
     
    XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);
    mgr.AddNamespace("x", "http://www.generix.fr/technicalframework/configuration");
     
    // On recupère un élement retrieve
    XPathNavigator retrieve = nav.SelectSingleNode("//x:viewstruct//x:view/x:view_link//x:retrieve[@viewKey='EVE']", mgr);
     
    // On récupère le premier élément view, ancètre du noeud actuel (retrieve)
    XPathNavigator view = retrieve.SelectSingleNode("ancestor::x:view[1]", mgr);

  3. #3
    Membre confirmé Avatar de Klivor
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 143
    Par défaut
    Merci Stormi ,

    Voilà ce que je voudrais faire , mais sa péte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     //Pour chaque noeud retrieve d'une view 
              foreach (XmlNode retrieve in xmlDoc.SelectNodes("//x:viewstruct//x:view/x:view_link/x:retrieve", mgr))
                       {
     
                  //Si le noeud retrieve ne possède pas d'attribut viewKey 
                           if (retrieve.Attributes["viewKey"].Value == "")
                           {
                              //J'affiche un message
                               MessageBox.Show("La view " + retrieve.SelectSingleNode("ancestor::x:view[1]/@name").Value + " n'a pas de viewKey définie");
                           }
     
                       }
    Je travail avec un XmlDoc et pas Xpath.
    De plus il peut y avoir pour une view : plusieurs noeud retrieve
    Ou : pas de noeud retrieve


    Je me demandais si c'etait pas possible de faire un truc de ce style , bien sur je sais absolument que ce code ne marche pas .
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (XmlNode view in   xmlDoc.SelectNodes("//x:viewstruct//x:view", mgr))
                       {
     
                           foreach (XmlNode retrieve in xmlDoc.SelectNodes("./retrieve", mgr))
                           {
     
                           }
                       }
    En gros accéder au noeud courant de ma premiere boucle dans la deuxieme.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Klivor Voir le message
    En gros accéder au noeud courant de ma premiere boucle dans la deuxieme.
    Ce sera le plus simple effectivement, mais tu dois passer par view au lieu de xmlDoc dans ta deuxième boucle et indiquer que l'on cherche à tous les niveaux (// au lieu de /) puisque retrieve n'est pas un enfant direct de view

    Au final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach (XmlNode view in xmlDoc.SelectNodes("//x:viewstruct//x:view", mgr))
    {
        foreach (XmlNode retrieve in view.SelectNodes(".//x:retrieve", mgr))
        {
        }
    }
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach (XmlNode view in xmlDoc.SelectNodes("//x:viewstruct//x:view", mgr))
    {
        foreach (XmlNode retrieve in view.SelectNodes("./x:view_link/x:retrieve", mgr))
        {
        }
    }
    Si on définit explicitement le chemin.

  5. #5
    Membre confirmé Avatar de Klivor
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 143
    Par défaut
    C'est bon sa marche , j'ai du indiquer le chemin explicitement sinon sa ne fonctionnait pas.
    Merci à toi Stormi.

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

Discussions similaires

  1. [C#] Récupérer plusieurs attributs : XPATH
    Par Elroy dans le forum Débuter
    Réponses: 0
    Dernier message: 14/06/2013, 15h06
  2. Réponses: 6
    Dernier message: 27/06/2007, 11h11
  3. [XPath]fonction récupérer plus grand valeur d'un attribut ?
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 18/05/2006, 14h27
  4. [XPATH] récupérer le positon() sur un test
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/09/2005, 17h20
  5. [XPath] Récupérer l'ID max dans un fichier XML
    Par Phach dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/07/2005, 13h57

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