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 :

Lecture d'un fichier XML avec Xpath


Sujet :

C#

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Lecture d'un fichier XML avec Xpath
    Bonjour à tous, je vous écrit car j'ai un soucis pour la lecture d'un fichier XML et j'ai beau chercher, je ne trouve pas de solution.

    Structure XML Exemple :
    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
    27
    28
    29
    30
    31
     
    <Voitures>
    	<Voiture>
    		<marque>Renault</marque>
    		<type>Megane</type>
    		<Options>
    			<Option>
    				<numero>1</numero>
    				<nom>Airbag</nom>
    			</Option>
    			<Option>
    				<numero>2</numero>
    				<nom>Autoradio MP3</nom>
    			</Option>
    		</Options>
    	</Voiture>
    	<Voiture>
    		<marque>Peugeot</marque>
    		<type>307</type>
    		<Options>
    			<Option>
    				<numero>1</numero>
    				<nom>Airbag</nom>
    			</Option>
    			<Option>
    				<numero>2</numero>
    				<nom>GPS</nom>
    			</Option>
    		</Options>
    	</Voiture>
    </Voitures>


    Fichier Source C#
    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
     
    XPathDocument XMLDoc = new XPathDocument(@"C:\test.xml");
    XPathNavigator XMLNav = XMLDoc.CreateNavigator();
    XPathNodeIterator XMLIter = null;
     
    XMLIter = XMLNav.Select("Voitures/Voiture");
    while (XMLIter.MoveNext())
    {
    	//Ici je peux recuperer la marque et le type avec 
    	XMLIter.Current.SelectSingleNode("marque").value;
    	XMLIter.Current.SelectSingleNode("type").value;
     
    	//Mon gros Probleme se situe pour boucler sur les options car je peux recuperer l'option 1 comme ceci:
    	XMLIter.Current.SelectSingleNode("Options/Option/numero").value;
    	XMLIter.Current.SelectSingleNode("Options/Option/nom").value;
     
    	//mais je n'arrive pas a boucler sur les options si je fais :
    	XMLIter = XMLNav.Select("Options/Option");
    	while (XMLIter.MoveNext())
    	{
    		XMLIter.Current.SelectSingleNode("numero").value;
    		XMLIter.Current.SelectSingleNode("type").value;
    	}
    	//CA BUG !!
    }
    En gros je n'arrive pas a boucler sur les enfants d'un XMLIter
    de plus si on fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	XMLIter = XMLNav.Select("Voitures/Voiture/Options/Option");
    	while (XMLIter.MoveNext())
    	{
    		XMLIter.Current.SelectSingleNode("numero").value;
    		XMLIter.Current.SelectSingleNode("type").value;
    	}
    On se retrouve avec toutes les options mais pas limitées à une voiture ce qui ne sert à rien.


    Si vous avez une réponse,

    Merci d'avance

  2. #2
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    Ca ira mieux avec ceci je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    XMLIterOptions = XMLIter.Current.Select("Options/Option");
    while (XMLIterOptions.MoveNext())
    {
        string numero = XMLIterOptions.Current.SelectSingleNode("numero").Value;
        string nom = XMLIterOptions.Current.SelectSingleNode("nom").Value;
    }
    ...
    Sinon pour les prochaines fois évite le "ça bug" et précise le problème rencontré plutôt. Parce que "ça bug", ça n'aide en rien.

  3. #3
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci, j'avais déjà appliqué cette solution mais je me demande si il n'existe pas un moyen plus propre pour faire cela avec les propriétés MoveChildren et SelectChildren du XPathNodeIterator ?

  4. #4
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu peux faire autrement c'est certain. Par exemple
    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
    XMLIter = XMLNav.Select("Voitures/Voiture");
    while (XMLIter.MoveNext())
    {
        XMLIter.Current.MoveToFirstChild();
        string marque = XMLIter.Current.Value;
        XMLIter.Current.MoveToNext();
        string type = XMLIter.Current.Value;
     
        XMLIterOptions = XMLIter.Current.SelectDescendants("Option", string.Empty, false);
        while (XMLIterOptions.MoveNext())
        {
            XMLIterOptions.Current.MoveToFirstChild();
            int numero = XMLIterOptions.Current.ValueAsInt;
            XMLIterOptions.Current.MoveToNext();
            string nom = XMLIterOptions.Current.Value;
        }
    }
    Mais cette solution n'est pas plus "propre" que la précédente. L'inconvénient par contre c'est que si l'ordre des balises change tu dois reprendre le code.

  5. #5
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci pour cette précision, je prend la première tu as raison c'est aussi "propre"

    Bonne journée

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

Discussions similaires

  1. [JDOM] Exception pendant la lecture d'un fichier XML avec JDOM
    Par 0coco0 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/03/2009, 11h21
  2. Problème pour lire un fichier Xml avec Xpath
    Par adrix26 dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/11/2008, 17h06
  3. Problème lors de la lecture d'un fichier xml avec XMLBeans
    Par oscar78 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 07/09/2007, 14h04

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