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 :

[System.Xml.XPath] Parser un fichier xml


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut [System.Xml.XPath] Parser un fichier xml
    Bonjour à tous!
    J'ai un petit soucis pour lire des données d'un fichier xml.
    Je voudrais juste sélectionner un noeud précis et extraire son attribut.
    Aprés lecture de plusieur post sur le forum j'ai essayé d'utiliser XPathDocument et XPathNavigator sans résultat.
    Voici mon fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <dossier>
    	<patient>
    		<nom>Arnaud</nom>
    		<prenom>David</prenom>
    		<age>22</age>
    		<poids></poids>
    		<adresse></adresse>
    		<email></email>
    	</patient>
    </dossier>
    Ainsi que mon source c# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using System;
    using System.Xml;
    using System.Xml.XPath;
     
    ...
     
    string xmlfile="chemin de mon fichier xml";
    XPathDocument docXML = new XPathDocument(xmlfile);
    XPathNavigator nav = docXML.CreateNavigator();
    nav.Matches("dossier/patient/nom");
    Console.WriteLine(nav.Value);
    Ce code m'affiche a l'écran : "ArnaudDavid22" !!!
    De plus nav.Matches("dossier/patient/nom"); retourne false !
    J'ai vu des sources qui utilisent XPathNodeIterator mais j'utilise la platerforme Mono et il n'existe pas dans XPathNodeIterator la fonction : Current.SelectSingleNode("nom du noeud").Value !
    Voici les liens sur XPathNodeIterator.Current et sur XPathNoteIterator de la doc mono.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Cet article devrait t'aider: http://support.microsoft.com/kb/307548


    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Ok merci pour cette réponse mais je voulais utiliser XPathDocument pour ne pas faire une lecture séquentielle.
    Sinon quand je test mon fichier avec un XmlTextReader et la propriété HasAttributes celle-ci me retourne false pour tout les noeuds! (même ceux qui ont des attributs).
    Le problème peut-il venir de la façon dont je créer le fichier xml?
    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
    23
    24
    25
    26
     
    //Ma classe xml
    public void writeDataPatient(string Nom,string Prenom,string Age,string Poids,string Adresse,string Email)
    		{
    			strXMLDataPatient="<dossier>\n\t<patient>\n";
    			strXMLDataPatient+="\t\t<nom>"+Nom+"</nom>\n";
    			strXMLDataPatient+="\t\t<prenom>"+Prenom+"</prenom>\n";
    			strXMLDataPatient+="\t\t<age>"+Age+"</age>\n";
    			strXMLDataPatient+="\t\t<poids>"+Poids+"</poids>\n";
    			strXMLDataPatient+="\t\t<adresse>"+Adresse+"</adresse>\n";
    			strXMLDataPatient+="\t\t<email>"+Email+"</email>\n";
    			strXMLDataPatient+="\t</patient>";
    		}
     
    public void createXMLFile()
    	{
    		sw = File.CreateText(FILE_NAME);
              	sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
              	sw.WriteLine(strXMLDataPatient);
              	sw.WriteLine("</dossier>");
              	sw.Close();
    	}
     
    //MAIN qui instencie la classe xml
    xml.writeDataPatient(Entry_nom.Text,Entry_prenom.Text,Entry_age.Text,Entry_poids.Text,Entry_adresse.Text,Entry_email.Text);
    xml.createXMLFile();

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pourquoi tu n'utilises pas les classes du Framework pour créer ton document XML ? comme XmlDocument par exemple...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Pourquoi tu n'utilises pas les classes du Framework pour créer ton document XML ? comme XmlDocument par exemple...
    Etant donné que je ne suis pas un pro de l'xml la solution la plus simple, au premier abord, ma paru de faire ligne par ligne le dossier xml sans avoir a me plongé dans la doc de System.Xml.
    Par la suite si la navigation dans mon fichier xml et plus simple grâce à XmlDocument je vais essayer de m'en servir.
    Cependant a quoi correspond le namespaceURI????
    Je sais que la BaseURI est le chemin d'accés au fichier. Quelle est la différence?
    Car si j'utilise XmlDocument, il faut passer le namespaceURI a chaque fois que l'on créer un noeud ou un attribut et je ne sais pas quoi mettre!

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Je n'ai jamais eu besoin d'utiliser les namespaces pour créer des fichiers XML.
    Peux tu poster le code que tu utilises ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2008, 11h24
  2. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  3. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  4. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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