我创建了一个扩展了SaxParser DefaultHandler类的类。我的意图是将XML输入存储在一系列对象中,同时保留原始XML数据的数据完整性。在测试过程中,我注意到一些节点数据在输入时被任意截断。问题使用SaxParser解析XML文档 - 2047个字符限制?
例如:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
使事情进一步复杂化,就会出现上述错误“随机” 1出来的一样XML标签的每〜100个实例。这意味着输入XML文件大约有100个包含<temperature>-125</temperature>
的标签,但其中只有一个产生了<sensitivity>5</sensitivity>
的输出。其他标签准确产生<sensitivity>-125</sensitivity>
。
我已覆盖抽象“的字符(字符[] CH,INT开始,INT长度)”的方法,以简单的抓斗XML标签之间的角色内容:
public void characters(char[] ch, int start, int length)
throws SAXException {
value = new String(ch, start, length);
//debug
System.out.println("'" + value + "'" + "start: " + start + "length: " + length);
}
我println语句产生以下输出特定温度标签导致错误的输出:
> '-12'start: 2045length: 3 '5'start:
> 0length: 1
这告诉我,该字符的方法被调用两次这个特定的XML元素。它正被调用一次所有其他XML标签。 secong行的“start”值表示char []字符在这个XML标记的中间被重置。然后用新的char []再次调用字符方法。
有人熟悉这个问题吗?我想知道我是否达到了char []的能力极限。但一个快速查询呈现这不太可能。我的char []似乎在〜被重置2047个字符
感谢,
LB
感谢的末尾添加
value = "";
。看来这个建议是正确的。 – 2009-09-29 20:27:03正确答案。另一个考虑的可能是切换到使用Stax解析器(javax.xml.stream.XMLStreamReader),并启用“合并模式” - 这可以提供与SAX类似的高性能,但无需手动合并文本。 – StaxMan 2014-09-08 18:22:45