2008-10-28 5 views
7

J'utilise une bibliothèque tierce qui renvoie "XML" qui n'est pas valide, car elle contient des caractères non valides, ainsi que des entités non déclarées. J'ai besoin d'utiliser un analyseur Java XML pour analyser ce XML, mais ça étouffe.Désinfection de XML incorrect en Java

Existe-t-il un moyen générique de désinfecter ce code XML afin qu'il devienne valide?

Répondre

6

Je pense que vos options sont quelque chose comme:

Les deux premiers sont plus lourds, étant donné qu'ils sont conçus pour analyser le HTML mal formé. Si vous savez que les problèmes sont dus à l'encodage et entités, mais par ailleurs bien formés, je vous suggère de rouler votre propre:

  • normalisent un codage UTF-8
  • utiliser un encodeur standard pour le texte entre le> et < caractères (entités de texte).
+0

dom4j est un autre analyseur puissant qui peut analyser quelles que soient les erreurs mineures http://dom4j.sourceforge.net –

3

Il semble que vous ayez besoin de savoir s'il existe un moyen de nettoyer automatiquement les données avant de passer à un parseur. Comment certains caractères sont-ils invalides, non valides dans le jeu de caractères déclaré, ou des méta-caractères XML non échappés tels que '<'?

Pour les entités non déclarées, j'ai résolu ceci une fois en configurant un analyseur SAX avec un gestionnaire d'erreurs qui ignorait ces erreurs. Cela pourrait peut-être vous aider aussi. Voir ErrorHandler API.

0

Pour les caractères illégaux, je recommanderais de mettre en place un lecteur de filtrage; il suffit de les convertir (en supposant que ce sont des caractères de contrôle) avec de l'espace, ou de les supprimer.

Les entités non déclarées sont plus complexes. certains analyseurs xml vous permettent de définir une DTD alternative à utiliser (Woodstox au moins.) Si oui, vous pouvez injecter DTD qui déclare les entités dont vous avez besoin