Sax解析器不完全读取一行

时间:2013-02-13 09:18:06

标签: java xml sax string-parsing

我正在尝试解析一个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,但问题仍然存在。

有什么建议吗?

1 个答案:

答案 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);