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

Résolu
PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 - 23 févr. 2006 à 15:10
PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 - 23 févr. 2006 à 16:43
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

PeTeRsLaStAr Messages postés 158 Date d'inscription samedi 22 juin 2002 Statut Membre Dernière intervention 27 juin 2015 1
23 févr. 2006 à 16:43
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
3
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
23 févr. 2006 à 16:39
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.
0
Rejoignez-nous