Probleme pour lire un fichier xml - C#/.NET managed - Programmation
Marsh Posté le 23-06-2009 à 00:45:55
Ton fichier n'est pas très pratique à parser... Il aurait été plus logique que l'élement <UnitsFile> eut été un élément enfant de l'élément <Company> au lieu d'en faire un élément de même niveau. Ca aurait rendu le parsing bien plus simple.
Si tu es en .NET 3.5, tu devrais utiliser LINQ to XML, qui est largement supérieur au parseur DOM d'origine. Voici ce que je te propose (en LINQ)
Code :
|
la sortie est la suivante :
Citation :
Provider : I |
A toi de récupérer les infos souhaitées dans le conteneur que tu souhaites
Marsh Posté le 23-06-2009 à 15:45:20
Je ne peux pas utiliser Linq car je travaille avec .NET 2.0.
Aussi je ne peux pas modifier le fichier XML.
Marsh Posté le 23-06-2009 à 17:22:10
J'ai essaye avec ReadToFollowing() mais dans ce cas ca lit tous les units and files et ne s'arrete pas entre les companies.
Marsh Posté le 24-06-2009 à 21:36:14
Si la solution ci-dessus ne devait pas convenir, à défaut de pouvoir utiliser Linq to XML en 2.0 tu peux utiliser XPath, tu y gagnerais par rapport à ta méthode !
Marsh Posté le 25-06-2009 à 09:07:04
+1, c'est un moindre mal par rapport au parser DOM tout pourri
Marsh Posté le 22-06-2009 à 20:37:22
Bonjour,
voila ca fait 2 jours que j'essaye un peu tout pour lire le fichier xml suivant:
<DataSources>
<DataSource>
<Company>P</Company>
<UnitsFiles>
<UnitFile>
<Unit>Metric</Unit>
<File>rec_setup_P.dat</File>
</UnitFile>
<UnitFile>
<Unit>English</Unit>
<File>rec_setup_PEnglish.dat</File>
</UnitFile>
<UnitFile>
<Unit>Mexican</Unit>
<File>rec_setup_PMexico.dat</File>
</UnitFile>
</UnitsFiles>
</DataSource>
<DataSource>
<Company>I</Company>
<UnitsFiles>
<UnitFile>
<Unit>Metric</Unit>
<File>rec_setup_IMetric.dat</File>
</UnitFile>
<UnitFile>
<Unit>English</Unit>
<File>rec_setup_IEnglish.dat</File>
</UnitFile>
<UnitFile>
<Unit>Mexican</Unit>
<File>rec_setup_IMexico.dat</File>
</UnitFile>
</UnitsFiles>
</DataSource>
</DataSources>
Je veux recuperer les noms <Company> avec les correspondants "files" et "units".
Voila le code qui se rapproche le plus de la solution (je pense) mais je n'arrive a recuperer qu'un seul fichet et unit par company.
string FileName = "C:\\HSPM\\DataSourceUnitQED.xml";
XmlReader reader = XmlReader.Create(FileName);
do{
reader.ReadToFollowing("Company" );
string Provider = reader.ReadInnerXml();
List<string> Units = new List<string>();
List<string> Files = new List<string>();
reader.ReadToFollowing("UnitsFiles" );
reader.ReadToFollowing("UnitFile" );
do{
//get units and wits file names
reader.ReadToDescendant("Unit" );
Units.Add(reader.ReadInnerXml());
reader.ReadToFollowing("File" );
Files.Add(reader.ReadInnerXml());
} while (reader.ReadToNextSibling("UnitFile" ));
ProviderUnitsWitsList.Add(new ProviderUnitsWitsFiles(Provider, Units, Files));
} while (reader.ReadToFollowing("DataSource" ));
Pouvez vous m'aider? Suis je dans la bonne direction?
Merci