2011-08-09 41 views
1

可能重複:
JAVA SAX parser split calls to characters()薩克斯字符打破元素除了

我有以下語法的XML文件:

<tag ...> 
a bunch of text here 
<tag ...> 

目前沒有任何結束標記爲tag。我抓住兩個標籤之間的文本,並將它們存儲在characters()List<String>中。它大部分工作,但在一些XML文件中,它讀取行結束符或其他內容,將文本分成兩部分;而不是存儲單個條目,「這裏有一堆文本」,我得到兩個條目:「一堆」和「這裏的文本」。不同之處在於,與其他所有條目不同,它不會在「一堆」之後或「此處輸入文本」之前存儲換行符。

我需要解決這個問題,但不知道如何。我會很感激你的幫助。

回答

1

解析器允許爲元素文本的每個字符串多次調用ContentHandler字符方法,但它不一定找到行終止符。 the Java tutorial on SAX對字符方法有簡短的解釋:

解析器不需要一次返回任何特定數量的字符。解析器可以一次返回任何一個字符,最多可以有幾千個字符,並且仍然是符合標準的實現。因此,如果您的應用程序需要處理它所看到的字符,那麼讓characters()方法在java.lang.StringBuffer中累積字符並且僅在確定已找到所有字符時纔對它們進行操作是明智的。

另外this Javaworld article有很好的解釋和例子。

+0

我剛剛在另一篇文章中閱讀了關於這個「功能」的內容。我如何最好地解決這個問題?只需在下一次調用'startElement'時將文本添加到'List '?或者可以在其他'startElement'之後調用其他塊?我如何知道「所有人都已找到」? – cesar

+0

你可以將讀入的字符存儲在一個字符串緩衝區中。你知道,當你發現元素的結尾時,他們都找到了。 –

+0

@anonymous:oops,意思是「你知道它們都是在你找到下一個元素的開始時找到的」,因爲你的標籤顯然是嵌套的 –