He creado una clase que amplía la clase SaxParser DefaultHandler. Mi intención es almacenar la entrada XML en una serie de objetos mientras se preserva la integridad de los datos de los datos XML originales. Durante la prueba, noté que algunos de los datos del nodo se truncaban arbitrariamente en la entrada.Issue Parsing XML Document using SaxParser - ¿límite de 2047 caracteres?
Por ejemplo:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
Para complicar más las cosas, los errores anteriores se produce "al azar" para 1 de cada ~ 100 instancias de los mismos etiquetas XML. Lo que significa que el archivo XML de entrada tiene aproximadamente 100 etiquetas que contienen <temperature>-125</temperature>
pero solo una de ellas produce una salida de <sensitivity>5</sensitivity>
. Las otras etiquetas producen exactamente <sensitivity>-125</sensitivity>
.
me han sobrescrito los "caracteres (char [] ch, de inicio, int longitud)" abstractos método hasta la simple apropiación del contenido de caracteres entre las etiquetas XML:
public void characters(char[] ch, int start, int length)
throws SAXException {
value = new String(ch, start, length);
//debug
System.out.println("'" + value + "'" + "start: " + start + "length: " + length);
}
Mis sentencias println producen el siguiente resultado para la etiqueta de temperatura específica que resulta en la producción errónea:
> '-12'start: 2045length: 3 '5'start:
> 0length: 1
esto me dice que los métodos de caracteres que se ha llamado dos veces para este elemento XML específico. Se está llamando una vez para todas las demás etiquetas xml. El valor de "inicio" de la línea secundaria me indica que los caracteres char [] se restablecen en el medio de esta etiqueta XML. Y el método de caracteres se vuelve a llamar con el nuevo carácter [].
¿Alguien está familiarizado con este problema? Me preguntaba si estaba llegando al límite de la capacidad de un char []. Pero una consulta rápida hace que esto sea poco probable. Mi char [] parece estar restablecer a ~ 2047 caracteres
Gracias,
LB
gracias. Parece que esta sugerencia es correcta. –
Respuesta correcta. Otra posibilidad a considerar es cambiar al uso del analizador Stax (javax.xml.stream.XMLStreamReader), y habilitar el "modo coalescente": esto ofrece un alto rendimiento similar al SAX, pero sin tener que fusionar manualmente el texto. – StaxMan