1

我正在尝试解析一个 simil -InkML文档。每个内容的节点都有更多的元组(用逗号分隔),有 6 个或 7 个数字(负数和小数)。

在测试中,我看到 SAX 的方法特征并没有记住所有数据。

编码:

    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

在调试中,我看到缓冲区不包含所有感兴趣的标签,但它只包含标签内容的前 107 个(或多或少)字符(我的行不再是 4610 字符):这很奇怪在我看来,这个由StringBufferSAX解析截取的字符。

我也使用过 StringBuilder 但问题仍然存在。

有什么建议吗?

4

1 回答 1

9

是的 - 这很明显。解析一个节点时,可能会多次调用字符。

您必须使用StringBuilderas 成员,将内容附加到字符中并处理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);
于 2013-02-13T09:23:55.547 回答