我正在尝试解析一个simil - InkML文档。每个内容的节点都有更多的元组(用逗号分隔),带有6或7个数字(负数和小数)。
在测试中,我发现SAX的方法 character 没有记住所有数据。
代码:
public class PenParser extends DefaultHandler {
//code useless
public void characters(char ch[], int start, int length) throws SAXException {
//begin my debug print
StringBuilder buffer=new StringBuilder ();
for(int i=start;i<length;i++){
buffer.append(ch[i]);
}
System.out.println(">"+buffer);
//end my debug print
在调试中,我看到 buffer 不包含所有感兴趣的标记号,但它只包含前107个(或多或少) char 标签的内容(我的行不长于4610字符):奇怪的是 char 的 StringBuffer 和 SAX 解析,在我的意见。
我也使用过StringBuilder,但问题仍然存在。
有什么建议吗?
答案 0 :(得分:9)
是的 - 这很明显。 解析一个节点时,可能会多次调用字符。
您必须使用StringBuilder
作为成员,将内容附加到字符中并处理endElement
中的内容。
<强>编辑强>
顺便说一句。你不需要逐个字符地构建缓冲区 - 这是我的角色实现(我总是使用)
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
characters.append(new String(ch,start,length));
}
......不要忘记......
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
final String content = characters.toString().trim();
// .... deal with content
// reset characters
characters.setLength(0);
}
private final StringBuilder characters = new StringBuilder(64);