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:
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:
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:
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