snakzbenjy
Messages postés32Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention23 avril 2009
-
8 avril 2008 à 14:47
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
8 avril 2008 à 17:17
Bonjour à tous,
Alors voilà j'ai un fichier XML de ce type la:
<?xml version= "1.0" ?>
Je cherche à récupérer dans une listbox ses informations.
exemple:
ComboBox1
Donnée combo 1 Donnée combo 2
Donnée combo 3 ListBox1
Donnée liste 1
Donnée liste 2
Donnée liste 3
Voilà mon code:
private
int ReadXml(){
XmlDocument doc =
new
XmlDocument();
doc.Load(
"exemple.xml");
Donc enfaite je souhaite avoir dans ma variable "aa" le nom et dans ma variable "aaa" la valeur.
mais le problème c'est que en faite dans ma variable "aaa" il me nomme a la suite:
Donnée combo 1
Donnée combo 2
Donnée combo 3
Donnée liste 1
Donnée liste 2
Donnée liste 3
C a d il ne tien pas compte des noeuds. Comment avoir que les valeurs du noeud du combobox
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 8 avril 2008 à 17:05
Bon, c'est la dernière cette fois-ci ^^
remplace les lignes suivantes:
XmlNodeList controlNodes = curControls.SelectNodes("//Control");
XmlNode curName = curControl.SelectSingleNode("/Name");
XmlNodeList valueNodes = curControl.SelectNodes("/Values/Value");
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 8 avril 2008 à 15:12
Salut,
Il ne faut pas faire:
doc.SelectNodes("//Value");
Car ceci va te donner tous les noeuds "Value" de ton document XML.
Le principe consiste à jour avec ta ligne :
XmlNodeList xNod = doc.SelectNodes("//Controls");
La liste te retourne tous les controls que tu souhaites.
Ensuite, tu peux prendre les valeurs souhaitées en faisant:
XmlNodeList xNodee = xNod.SelectNodes("/Values/Value");//Tu travailles avec ton noeud control uniquement
Voila le principe. Il ne faut pas jouer qu'avec le XmlDocument "doc". Il faut parcourir en profondeur :
1) Sélection de tous les controles
2) Sélection des valeurs de chaque noeud control
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 8 avril 2008 à 16:04
Oui pardon c'est exact ! Autant pour moi (faute d'inattention) !
Tu ne peux sélectionner un XPath pour une liste de noeud car il ne sera pas sur quel noeud recherché ^^.
Il faut faire:
XmlNodeList xNod = doc.SelectNodes("//Controls");
foreach (XmlNode curNode in xNod)
{
//... Ton code
XmlNodeList xNodee = curNode.SelectNodes("/Values/Value");//Sur le noeud parcouru
}
Et en plus, c'est plus pratique (et spécifique) que :
foreach (object title in xNod)
Bon courage,
Billou_13
Vous n’avez pas trouvé la réponse que vous recherchez ?
//Récupération de tous les noeuds 'Controls'
XmlNodeList controlsNodes = doc.SelectNodes("//Controls");
foreach (XmlNode curControls in controlsNodes)
{
//Récupération de tous les noeuds 'Control'
XmlNodeList controlNodes = curControls.SelectNodes("//Control");
foreach (XmlNode curControl in controlNodes)
{
//Récupération du noeud 'Name'
XmlNode curName = curControl.SelectSingleNode("/Name");
string name = curName.InnerText;
//Récupération de tous les noeuds 'Value'
XmlNodeList valueNodes = curControl.SelectNodes("/Values/Value");
foreach (XmlNode curValue in valueNodes)
{
string value = curValue.InnerText;
}
}
}
return 1;
}
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 8 avril 2008 à 17:17
Pour être plus clair et synthétique sur les différentes valeur XPath (dans XmlNode.SelectNodes(xpath); :
1) //node indique que tu cherches les noeuds "node" quelque que soit la hiérarchie de profondeur.
2) ./node indique que tu cherches les noeuds fils "node" uniquement (n-1 en gros)
./ est donc plus adapté que // dans ton cas.
Et tu peux faire bien plus et beaucoup plus puissant. Je te conseilles pour cela fortement de regarder le tutorial très bien fait de Bidou:
http://www.csharpfr.com/tutorial.aspx?id=536