SAX解析器读取一行没有完全(Sax parser read a line not totally)

2019-10-17 17:03发布

我试图解析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(或多或少)CHAR(我行不长于4610字符):真奇怪该切通过的StringBufferSAX解析,在我看来。

我曾使用StringBuilder的太多,但问题仍然存在。

任何建议?

Answer 1:

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

你将不得不使用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);


文章来源: Sax parser read a line not totally