Sax解析器不完全读取一行

ale*_*zio 1 java xml sax string-parsing

我正在尝试解析一个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
Run Code Online (Sandbox Code Playgroud)

在调试中,我看到缓冲区不包含感兴趣的标记的所有数量,但它只包含标记内容的前107个(或多或少)char(我的行不长于4610个字符):这很奇怪该切的焦炭通过的StringBufferSAX解析,在我看来.

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

有什么建议?

mic*_*l_s 9

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

您必须使用StringBuilderas成员,将内容附加到字符中并处理内容endElement.

编辑

顺便说一句.你不需要逐个字符地构建缓冲区 - 这是我的字符实现(我总是使用)

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException
    {
        characters.append(new String(ch,start,length));
    }
Run Code Online (Sandbox Code Playgroud)

......别忘了......

    @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);
Run Code Online (Sandbox Code Playgroud)