Estoy usando Java DocumentBuilder.parse(InputStream)
para analizar un documento XML. Ocasionalmente, recibo documentos XML con formato incorrecto en el sentido de que hay basura adicional después del >
final que causa un SAXException: Content is not allowed in trailing section
. (En los casos que he visto, la basura es simplemente uno o más bytes nulos.)Ignorando "El contenido no está permitido en la sección final" SAXException
No me importa lo que está después de la final >
. ¿Existe una manera fácil de analizar un documento XML completo en Java y hacer que ignore cualquier basura al final?
Tenga en cuenta que por "ignorar" no me refiero simplemente a atrapar e ignorar la excepción: me refiero a ignorar la basura arrastrada, no arrojar ninguna excepción, y devolver el objeto Document
desde el XML hasta un incluyendo el final >
es válido.
No tengo control sobre el remitente. Y su "respuesta" no está en el espíritu de "Sé liberal en lo que aceptas y estricto en lo que emites". –
Usted preguntó "¿hay alguna manera fácil de analizar un documento XML completo en Java y hacer que ignore cualquier basura arrastrada?" La respuesta es "no, no hay", y di la razón. ¿Quizás estás buscando http://home.ccil.org/~cowan/XML/tagsoup/? ¿Quizás sepa que su XML no tiene CDATA y puede implementar un contenedor primitivo inputStream? No estoy seguro de qué respuesta estás buscando. –
Cada analizador XML realiza un seguimiento de cada elemento y sabe cuándo dicho elemento se ha "cerrado" al analizar el> de su etiqueta de cierre. Eso significa que cada analizador de XML también conoce el final> cuando lo ve porque el primer elemento ha sido equilibrado por su etiqueta de cierre. En ese punto, quiero que el analizador simplemente se detenga. Estás haciendo esto más complicado de lo que es. –