我正在使用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));
}
}
但是我只在我的角色缓冲区中获得第一行“(a)定义。”。其他行未被复制。如何访问缺失的行?
谢谢。
答案 0 :(得分:5)
根据SAX parser specification,您可能会获得characters
的多个回调,代表相同字符块的块。您应该将连续的组合成一个字符串。
Parser将调用[
characters
]方法来报告每个字符数据块。 SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块;但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息。
答案 1 :(得分:1)
无法保证使用完整文本调用characters()
。您需要整理每个调用的结果,并在处理完结束元素后检查字符串。