Je suis en train d'utiliser C # 's XmlReader sur une grande série de fichiers XML, ils sont tous correctement formatés à l'exception de quelques unes de sélection (malheureusement je ne suis pas en mesure de les avoir changé, car cela casserait beaucoup d'autre code).
les erreurs ne viennent que d'une partie spécifique des ces fichiers XML affrontant et il est autorisé à simplement les sauter, mais je ne veux pas arrêter de lire le reste du fichier XML. p> les mauvaises parties ressemblent à ceci:. p>
<InterestingStuff> ... <ErrorsHere OptionA|Something = "false" OptionB|SomethingElse = "false"/> <OtherInterestingStuff> ... </OtherInterestingStuff> </InterestingStuff>
3 Réponses :
Donc non, vous ne pouvez pas faire cela à moins d'écrire votre propre implémentation XML. Fixep sur les données mal formées est probablement plus facile. P> xmlreader code> est strict. Toute non-conformité, il sera erronée. P>
Une fois que j'ai eu une situation similaire (avec des fichiers HTML, pas des fichiers XML). Mais j'ai fini par utiliser une expression régulière pour chaque fichier HTML avant de le saisir dans mon Strong> Pipeline de fonctionnement Strong>, pour supprimer des pièces malformées. Il est venu utile et était plus facile que de lutter avec l'API. :) p>
J'ai un peu expérimenté avec cela dans le passé. P>
En général, l'entrée doit simplement être bien formée. Un xmlreader ira dans un état d'erreur irrécupérable lorsque les règles XML de base sont cassées. Il est facile d'éviter la validation du schéma, mais cela n'est pas pertinent ici. p>
Votre seule option consiste à nettoyer l'entrée, qui peut être effectuée de manière en diffusion en continu (flux personnalisé ou textreader) mais qui nécessitera une forme d'analyse de lumière. Si vous n'avez pas de symboles de pipe dans des positions valides, c'est facile. p>
Hey Henk, cela me semble comme la meilleure solution. J'ai également essayé simplement de charger le fichier entier et de remplacer les tuyaux, mais cela a fait une analyse d'analyse à deux reprises (même si j'ai utilisé un flux de mémoire pour stocker les données chargées). L'extension d'un courant ou d'un textreader semble être une bonne idée de continuer à être performant.
remplacer | signe avant de charger un lecteur avec - pourrait résoudre le problème
Comment lisez-vous les informations dans le XMLreader? Lisez-vous du flux?
Si vous connaissez l'erreur à l'avance, vous ne pouvez pas corriger le contenu de la source avant de l'analyser? Mais de manière générale, vous devez corriger la source XML ... ou ne pas l'appeler xml (j'imagine que vous dépendez de quelqu'un d'autre ...?)
Bonnes suggestions, mais je ne veux pas lire dans tout le dossier (par conséquent, pourquoi j'utilise xmlreader et non xmldocument.load ()) car cela pourrait être coûteux et je n'ai pas besoin de toutes les informations dans les fichiers. Pour clarifier, j'ai lu directement à partir d'un disque à l'aide de xmlreader.creat (Filepath) et oui, je dépend des autres personnes, je ne peux donc rien faire de la source.
+1 Steve B -
xmlreader code> lit XML, alors convertissez l'entrée non XML en XML valide dans une méthode isolée, en gardant le reste de votre code propre.