2012-04-10 4 views
3

ich den SAX-Parser bin mit Text zu analysieren, vorgeformten, wie unten aufgeführt:SAX-Parser nicht nach Newline Lesen

<content><![CDATA[(a) Definitions. 
    (i) term - Definition of term 
    (ii) term 2 - Definition of term 2 
    (iii) term 3 - Definition of term 3]]> 
</content> 

Mein Handler

public void characters(char ch[], int start, int length){ 
    if (content) { 
     contentText = new String(ch, start, length)); 
    } 
}  

Allerdings bin ich nur immer die erste Zeile „(a) Definitionen. "In meinem Charakterpuffer. Die anderen Zeilen werden nicht kopiert. Wie kann ich auf die fehlenden Zeilen zugreifen?

Vielen Dank.

Antwort

5

Gemäß SAX parser specification erhalten Sie möglicherweise mehrere Rückrufe für characters, die Teile des gleichen Zeichenblocks darstellen. Sie sollten aufeinander folgende in einer einzigen Zeichenfolge kombinieren.

Der Parser ruft die Methode [characters] auf, um jeden Teil der Zeichendaten zu melden. SAX-Parser können alle zusammenhängenden Zeichendaten in einem einzelnen Chunk zurückgeben, oder sie können sie in mehrere Chunks teilen; Alle Zeichen in einem einzelnen Ereignis müssen jedoch von derselben externen Entität stammen, damit der Locator nützliche Informationen bereitstellt.

1

Es kann nicht garantiert werden, dass characters() mit dem vollständigen Text aufgerufen wird. Sie müssen die Ergebnisse jedes Aufrufs sortieren und die Zeichenfolge überprüfen, sobald Sie das Endelement verarbeitet haben.

+0

Also sollte ich einen Zeichenfolgenpuffer verwenden, um die Zeichen zu lesen, bis es fertig ist. Danke – Daniel