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 :

Parser du XML avec SelectSingleNode


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2005
    Messages : 66
    Par défaut Parser du XML avec SelectSingleNode
    Bonjour,

    J'ai un problème quand j'utilise la méthode SelectSingleNode.

    Voici le fichier xml à parser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" standalone="yes"?>
    <Data xmlns="http://toto.com">
      <Activity>
        <id>id1</id>
        <location_id>id2</location_id>
      </Activity>
      <Location>
        <id>id2</id>
        <post_code_zip>32000</post_code_zip>
        <address_line1>33th Avenue</address_line1>
        <city>NYC</city>
      </Location>
    </Data>
    Voici mon code pour récupérer ma position
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    currentID = "id2";
    XmlNode position = document.SelectSingleNode("/Data/Location[id='"+currentID+"']");
    Mais le résultat est Null...
    même en faisant plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XmlNodeList position2 = document.SelectNodes("//Location");
    Toujours Null
    Seule la méthode GetElementsByTagName donne une résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNodeList nodeList = document.GetElementsByTagName("Location");
    Malgré la lecture de plusieurs sujets sur le forum je n'arrive pas à m'en sortir...

  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
    C'est parce que tu as un espace de nom et que tu ne le gères pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable);
    mgr.AddNamespace("n", "http://toto.com");
    XmlNode position = document.SelectSingleNode("/n:Data/n:Location[n:id='id2']", mgr);
    XmlNodeList position2 = document.SelectNodes("//n:Location", mgr);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2005
    Messages : 66
    Par défaut
    Merci StormimOn ! ça marche !
    J'avais pourtant essayé ça mais sans les "n:" dans les requêtes XPath.

  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
    Le n est arbitraire. L'important c'est qu'il faut obligatoirement définir un préfixe lorsque l'on ajoute un espace de nom (méthode AddNamespace du XmlNamespaceManager).

    Ensuite, comme ton espace de nom est celui par défaut (xmlns) cela signifie que les éléments sans préfixe dans le XML appartiennent à l'espace de nom par défaut. Il faut donc dans la requête XPath ajouter le préfixe de l'espace de nom par défaut pour que l'ensemble fonctionne

  5. #5
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Bonjour à tous,

    je reprends ce topic qui m'interesse, j'ai une petite question, est ce que je suis obligé d'ajouter le code que tu suggere StormimOn ?

    je m'explique, j'ai fait une conversion de fichier XML (grosse conversion).
    Une fois terminé , on me sort un fichier xml comprenant un namespace, donc un prefixe se présente sur toutes mes balises !!!!

    Du coup, bien evidemment, je suis embeter !!!! je voulais savoir si il n'y avait que cette solution, car ca m'oblige a revoir bcp de code !!

    je pense que non, mais je prefere poser la question !! sachant que ce namespace (ou prefice) ne me sert à rien, car j'aurait le meme dans l'esemble du fichier.

    Merci d'avance pour votre futur aide !

  6. #6
    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
    A partir du moment où il y a un ou plusieurs namespace et que tu travailles avec des requêtes XPath, il faut obligatoirement un XmlNamespaceManager pour la résolution des espaces de noms XML.

  7. #7
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    ok merci pour ta reponse ......

    il n'est pas possible de passer par cette methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xpa.addNamespace(prefix, uri);

  8. #8
    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
    Si justement, c'est une méthode de la classe XmlNamespaceManager. Cela permet de déclarer les espaces de noms dont on aura besoin pour les requêtes XPath. cf. l'exemple de code un peu plus haut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    XmlDocument document;
    ...
    XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable);
    mgr.AddNamespace("n", "http://toto.com");
    XmlNode position = document.SelectSingleNode("/n:Data/n:Location[n:id='id2']", mgr);
    XmlNodeList position2 = document.SelectNodes("//n:Location", mgr);

  9. #9
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    il y a quelque chose que je comprends pas tres bien, lorsque que je parse avec xpath en precisnat par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.SelectSingleNode("/n: Data");
    cela marche tres bien, pas besoin de rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable);
    mgr.AddNamespace("n", "http://toto.com");

    est ce normal ??

  10. #10
    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
    Tu t'es basé sur le XML au début du sujet ?
    Tu pourrais montrer ton code ?

    Car avec
    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
    string xml =
    @"<?xml version=""1.0"" standalone=""yes""?>
    <Data xmlns=""http://toto.com"">
    <Activity>
    <id>id1</id>
    <location_id>id2</location_id>
    </Activity>
    <Location>
    <id>id2</id>
    <post_code_zip>32000</post_code_zip>
    <address_line1>33th Avenue</address_line1>
    <city>NYC</city>
    </Location>
    </Data>";
     
    XmlDocument document = new XmlDocument();
    document.LoadXml(xml);
     
    XmlNode position = document.SelectSingleNode("/n:Data/n:Location[n:id='id2']");
    XmlNodeList position2 = document.SelectNodes("//n:Location");
    Tu dois avoir une XPathException lors des sélections, car tu n'as rien pour faire la résolution des espaces de noms.

  11. #11
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    en java, ce code marche trz bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    xpa = XPath.newInstance("//NS1:UNB_0001");
    	elmtTmp = (Element)xpa.selectSingleNode(racineTmp);
     
    .... 
    <?xml version="1.0"?>
    <NS1:Message_Frame xmlns:NS1="BIGNetXMLSchema"
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<NS1:UNB_S001>
    			<NS1:UNB_0001>UNOA</NS1:UNB_0001>
    			<NS1:UNB_0002>1</NS1:UNB_0002>
    		</NS1:UNB_S001>

  12. #12
    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 tom78 Voir le message
    en java, ce code marche très bien
    En Java peut être, mais ici ce n'est pas un forum Java. C'est un forum .Net. Ce qui est valable en Java ne l'est pas forcément en .Net et vice versa.

  13. #13
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    En Java peut être, mais ici ce n'est pas un forum Java. C'est un forum .Net. Ce qui est valable en Java ne l'est pas forcément en .Net et vice versa.
    désolé, effectivement, j'ai vu un peu tard que j'ai été redirigé vers un topic .net, mais bon, j'ai continué .

    Il y a des similitudes, merci en tout cas.

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

Discussions similaires

  1. Parser du xml avec SelectSingleNode
    Par GoTrUnKo dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/01/2009, 11h52
  2. [SimpleXML] Parser un XML avec SimpleXML_Load_File
    Par mathieu3392 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 12/10/2007, 11h11
  3. parser du xml avec java
    Par 080983 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/07/2007, 09h56
  4. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  5. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52

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