2008-10-28 15 views
7

Estoy usando una biblioteca de terceros que devuelve "XML" que no es válido, porque contiene caracteres no válidos, así como entidades no declaradas. Necesito usar un analizador XML de Java para analizar este XML, pero se está ahogando.Desinfección de XML incorrecto en Java

¿Existe alguna forma genérica de desinfectar este XML para que sea válido?

Respuesta

6

creo que sus opciones son algo así como:

Los dos primeros son más pesados, dado que están diseñados para analizar HTML mal formado. Si sabe que los problemas se deben a la codificación y entidades, pero por lo demás bien formados le sugeriría liar:

  • estandarizar una codificación UTF-8
  • utilizar un codificador estándar para el texto entre los> y < caracteres (entidades de texto).
+0

dom4j es otro potente analizador que puede analizar independientemente de algunos errores menores http://dom4j.sourceforge.net –

3

Parece que tiene que averiguar si hay una forma de limpiar automáticamente los datos usted mismo antes de entregarlos a un analizador. ¿Cómo son ciertos caracteres inválidos, no válidos en el conjunto de caracteres declarado, o metacaracteres XML no escamoteados como '<'?

Para entidades no declaradas, una vez resolví esto configurando un analizador de SAX con un manejador de errores que básicamente ignoró estos errores. Eso también podría ayudarte. Ver ErrorHandler API.

0

Para caracteres ilegales, recomendaría implementar el Lector de filtrado; simplemente conviértelos (asumiendo que estos sean caracteres de control) con espacio, o elimínelos.

Las entidades no declaradas son más complicadas; algunos analizadores xml le permiten definir una DTD alternativa para usar (al menos Woodstox). Si es así, puede inyectar una DTD que declare las entidades que necesita.

Cuestiones relacionadas