Un fichier xml... pas très clean qu'il faudrait pouvoir réutiliser... [Résolu]

Signaler
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
-
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
-
Bonjour à toutes et à tous.
Voilà, je dois traiter un fichier xml en entrée, pour en faire un beau tableau en sortie.
Le hic, c'est que pour y arriver, je dois commencer par regénérer un fichier xml 'convenable', car celui qu ej'ai en entrée ressemble vraiment à rien (sauf si vous me donnez un avis contraire ? )

Voilà à quoi ça ressemble

<CodePiece Number= " 3 ">





[file:///C:/DEV/TransformXMLFile/Toles_ProjetPSE_l.xml# -] <NbObjects>






<Haut>96329-125</Haut>



<Bas>32451-125</Bas>
</NbObjects>





<Attributs Nom ="Mon objet" MATIERE= " Plastique " DIMENSION ="0.67" />



</CodePiece>

...
Voilà dans les grandes lignes le fichier xml arrivant.
J'aurais bien la solution de passer par un InnerXMLText, et de faire mon p'tit bordel dans mon coin, mais avant de faire ça, je voulais savoir sil y avait pas moyen d'accéder, correctement à ces données ?
Voilà ce que je fais actuellement...


objXmlDoc.Load(oFileXML);


XmlNodeList objChildNode;


objChildNode=objXmlDoc.GetElementsByTagName("CodePiece");



foreach(XmlNode objNode
in objChildNode)


{


MessageBox.Show(objNode.ChildNodes[0].InnerText);//M'affiche NbObjects, Haut + bas à la suite


MessageBox.Show(objNode.Attributes[0].InnerText);// Part en erreur
MessageBox.Show(objNode.ChildNodes[1].InnerText);// Part en erreur

}

Peut être que je n'ai pas forcément très bien compris le principe du xml (je l'avoue sans complexe) auquel cas, vous auriez peut être d'autres exemples que le fameux 'book.xml' de Krosoft à me conseiller, des exemples un peu plus poussés ?

Merci d'avance pour votre aide.

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher

2 réponses

Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Bon en fait, après quelques explications, ça devient plus limpide...


objXmlDoc.Load(oFileXML);


XmlNodeList objChildNode;


objChildNode= objXmlDoc.GetElementsByTagName("CodePiece");


XmlAttributeCollection objAttributeCollection;


XmlNodeList objChildNode2;



foreach(XmlNode objNode
in objChildNode)


{


objChildNode2=objNode.ChildNodes[0].ChildNodes;



foreach(XmlNode MyCurrentNode
in objChildNode2)


{


MessageBox.Show(MyCurrentNode.Name + " vaut " + MyCurrentNode.InnerText);


// renvoie <Haut> 96329-125 </Haut> puis <Bas>32451-125</Bas>

}


objAttributeCollection =objNode.ChildNodes[1].Attributes;


foreach(XmlAttribute MyItems
in objAttributeCollection)


{


MessageBox.Show(MyItems.Name + " vaut " + MyItems.Value);


//Renvoie Nom" Mon objet " MATIERE"Plastique" DIMENSION="0.67"
}


}

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Salut, je vois pas trop pourquoi ton code génère une exception mais en tout cas voici deux trois infos :
La propriété Attributes a un indexeur de type string avec le nom de l'attribut en paramètre, le code devient plus lisible ; Por les noeuds enfant c'est pareil. Même si l'implémentation est la même utilise plutôt Value que InnerText, pour récupérer la valeur d'un attribut.