2012-04-10 51 views
3

我使用SAX解析器解析預製文本後不讀:SAX解析器下面列出換行符

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

我處理

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

但是我只得到了第一線「(一)定義。「在我的字符緩衝區中。其他行不被複制。我如何訪問缺失的行?

謝謝。

回答

5

根據SAX parser specification,您可能會得到characters的多個回調,表示相同字符塊的塊。您應該將連續的組合成一個字符串。

解析器將調用[characters]方法來報告每個字符數據塊。 SAX解析器可能會將所有連續的字符數據返回到單個塊中,或者它們可能會將其分割爲多個塊;但是,任何單個事件中的所有字符必須來自相同的外部實體,以便定位器提供有用的信息。

1

無法保證characters()將與完成文本一起被調用。您需要整理每個調用的結果,並在處理結束元素後檢查字符串。

+0

所以我應該使用字符串緩衝區來讀取字符,直到完成。 謝謝 – Daniel 2012-04-10 19:28:37