4

我正在使用 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) Definitions.”。其他行没有被复制。如何访问缺少的行?

谢谢你。

4

2 回答 2

6

根据SAX 解析器规范,您可能会收到多个回调characters,代表相同字符块的块。您应该将连续的组合成一个字符串。

Parser 将调用 [ characters] 方法来报告每个字符数据块。SAX 解析器可以在单个块中返回所有连续的字符数据,也可以将其拆分为多个块;但是,任何单个事件中的所有角色都必须来自同一个外部实体,以便定位器提供有用的信息。

于 2012-04-10T19:23:39.763 回答
1

无法保证characters()将使用完整的文本调用。您需要整理每次调用的结果,并在处理完结束元素后检查字符串。

于 2012-04-10T19:23:25.560 回答