Je recherche un parser de XML simple capable de lire node par node un fichier.
En effet, je dois travailler avec des fichiers XML pas toujours très standards pour être poli et les classes .NET XmlTextReader (on oublie XmlDocument qui ne charge pas le fichier) throw des exceptions et bloque.
Par exemple, j'ai des nodes comme
<nom attribut="valeur", attribut2="valeur2"> qui peuvent se glisser de temps en temps. La virgule fais planter le truc. Mettre dans un try/catch ne change rien au probleme: le XmlTextParser s'obstine à vouloir lire l'attribut corrompu.
Bref, je recherche un truc tout con capable de lire une node XML sans verification de standards ou une regexp assez souple pour faire ce type de boulot à la rigueur...
La méthode Read() d'un XmlTextReader passe d'une node à la suivante. Si cette node est corrompue, le reader n'arrive pas à passer à la node suivante et reste bloqué. Comment contourner cet effet? (ou existe t-il un parser plus souple?)
Bonsoir,
Si le document n'est pas conforme XML, alors je ne pense pas que les objets traitant XML (System.Xml...) soient capable de traiter de tel document puisque ce n'est justement pas un fichier XML !
Dans ce cas là, je ne vois guère d'autres solutions que de:
- Corriger le fichier afin que cela soit vraiment du XML
- Utiliser un parser standard comme si c'était du texte.
Hum mouais... C'est bien ce que je craignais. Comme la réponse ne va pas tomber du ciel je suis en train d'écrire mon propre parser de node XML adapté à ce que je veux faire.
Je n'y peux rien: je récupère des logs d'un autre logiciel, et je dois donc me débrouiller avec.
J'ai signalé la non conformité de leur XML produit au service technique, mais en attendant je dois me débrouiller.
Ok.
Personnellement je serais plutot parti sur une phase de transformation du log pour le rendre "valide" afin de pouvoir utiliser du standatd derrière.
C'est sans doute une bonne idée mais ca prendrait beaucoup de temps. J'ai besoin de parser des dizaines de milliers de lignes dans un temps raisonnable. En tous cas merci pour l'indexeur :)