cs_titi66
Messages postés120Date d'inscriptionmercredi 14 janvier 2004StatutMembreDernière intervention 3 mars 2009
-
25 mai 2005 à 15:14
micbristol
Messages postés36Date d'inscriptiondimanche 23 décembre 2007StatutMembreDernière intervention24 février 2013
-
28 sept. 2009 à 17:19
bonjour
Je souhaite utiliser XmlPathNavigator pour me placer sur un noeud donné de mon fichier et en extraire les données.
Comment faire ?
Comme ça ça fonctionne...
Maintenant le tableau result ne va peut-être pas contenir ce que tu aimerais, car il y a plusieurs sous-élément à l'élément book. A toi de faire qu'il retourne ce que tu as envie...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 25 mai 2005 à 15:42
Hello,
Voici la procédure à suivre :
// Création d'un XPathDocument
XPathDocument doc = new XPathDocument(myXmlTextReader);
// Création d'un path navigator
XPathNavigator nav = doc.CreateNavigator();
// Descendre dans l'arborescence
XPathNodeIterator iter = nav.Select("page/header/title");
// Passer au noeud suivante
iter.MoveNext();
// Récupérer sa valeur
string item = iter.Current.Value;
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 26 mai 2005 à 08:07
Bon dans ce cas tu peux faire une méthode Read() qui ressemble à peu près à ça (à toi de faire les ajustement nécessaire si besoin, j'ai fait ça rapidement) :
// Parsing de l'xml
private
void Read()
{
int i = 0;
XPathDocument xPathDoc = new XPathDocument("Test.xml");
// Doc à ouvrir
XPathNavigator xpn = xPathDoc.CreateNavigator(); // Navigator
XPathNodeIterator xpnIter = xpn.Select(@"......../Entreprise");
// Node qui nous intéresse
string[] result = new string[xpnIter.Count]; // Contient ce qui nous intéresse
while(xpnIter.MoveNext())
{
XPathNavigator curXpn = xpnIter.Current; // Node courrant
if(curXpn.GetAttribute("Nom", string.Empty).Equals("Ferrari") // Attribut qui nous intéresse
{
result[i] = curXpn.Value; // Met sa valeur dans le tableau
i++;
}
}
// Juste pour voir le contenu du tableau
foreach(string s in result) if(s != null) Console.WriteLine(s);
Console.ReadLine();
}
cs_titi66
Messages postés120Date d'inscriptionmercredi 14 janvier 2004StatutMembreDernière intervention 3 mars 2009 26 mai 2005 à 12:12
Ok merci
Mais j'ai toujours un problème que je ne comprends pas : quelque soit le fichier Xml que j'utilise, je recupere toutes les valeurs de nodes (j'affiche xpnIter.current.value) , mais le xpnIter est toujours à 0
cs_titi66
Messages postés120Date d'inscriptionmercredi 14 janvier 2004StatutMembreDernière intervention 3 mars 2009 26 mai 2005 à 12:45
oui
j'ai utilisé ton code mais le xpnIter.Count est toujours à 0
il ne passe pas dans la boucle while ...il saute directement à foreach comme s'il n'y avait pas de node...
string[] result =
new
string[Iterator.Count];
// Contient ce qui nous intéresse
while(Iterator.MoveNext())
{
XPathNavigator curXpn = Iterator.Current;
// Node courrant
if(curXpn.GetAttribute("genre",
string.Empty).Equals("novel"))
// Attribut qui nous intéresse
{
result[i] = curXpn.Value;
// Met sa valeur dans le tableau
i++;
}
}
foreach(
string s
in result)
if(s !=
null) MessageBox.Show(s);
}
catch (Exception ex)
{
MessageBox.Show("Exception: {0}"+ ex.ToString());
}
Et le fichier le + simple que j'utilise :c'est un fichier provenant des exemples microsoft
Quand je cherche book , le movenext ne marche pas
micbristol
Messages postés36Date d'inscriptiondimanche 23 décembre 2007StatutMembreDernière intervention24 février 2013 28 sept. 2009 à 17:19
Salut j'espere que vous suivez toujours ce message car je bute sur un probleme similaire
mon xml et du genre
<conjugation-fr>
<template name="pr:endre">
endre
ends
ends
end
enons
enez
ennent
enais
etc..
je voudrais recuperer une a une les valeurs mais tout ce que j'arrive a avoir c'est la string contenant la veleur de tous les nodes enfants comme expliqué plus haut
meme avec la reponse accepter de Bidou, je n'y parviens pas :( , des idées ?