Ich habe eine Klasse erstellt, die die SaxParser DefaultHandler-Klasse erweitert. Mein Ziel ist es, die XML-Eingabe in einer Serie von Objekten zu speichern, während die Datenintegrität der Original-XML-Daten erhalten bleibt. Während des Tests bemerkte ich, dass einige der Knotendaten willkürlich bei der Eingabe abgeschnitten wurden.
Zum Beispiel:
Eingabe: -125 Ausgabe: 5
Eingabe:
Um die Dinge weiter zu komplizieren, treten die obigen Fehler "zufällig" bei 1 von etwa ~100 Instanzen derselben XML-Tags auf. Das bedeutet, dass die Eingabedatei ungefähr 100 Tags enthält, die -125
enthalten, aber nur einer von ihnen gibt eine Ausgabe von 5
. Die anderen Tags erzeugen genau -125
.
Ich habe die abstrakte Methode "characters(char[] ch, int start, int length)" überschrieben, um einfach den Zeicheninhalt zwischen XML-Tags zu erfassen:
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);
}
Meine println-Anweisungen erzeugen die folgende Ausgabe für das spezifische Temperatur-Tag, das zu fehlerhafter Ausgabe führt:
> '-12'start: 2045length: 3 '5'start:
> 0length: 1
Dies sagt mir, dass die characters-Methode für dieses spezifische XML-Element zweimal aufgerufen wird. Sie wird für alle anderen XML-Tags einmal aufgerufen. Der "start"-Wert der zweiten Zeile deutet darauf hin, dass das char[] chars mitten in diesem XML-Tag zurückgesetzt wird. Und die characters-Methode wird erneut mit dem neuen char[] aufgerufen.
Ist jemand mit diesem Problem vertraut? Ich frage mich, ob ich das Limit der Kapazität eines char[] erreicht habe. Aber eine schnelle Abfrage macht dies unwahrscheinlich. Mein char[] scheint bei ~ 2047 Zeichen zurückgesetzt zu werden.
Danke,
LB