【发布时间】:2010-12-02 10:32:09
【问题描述】:
我创建了一个扩展 SaxParser DefaultHandler 类的类。我的意图是将 XML 输入存储在一系列对象中,同时保持原始 XML 数据的数据完整性。在测试期间,我注意到一些节点数据在输入时被任意截断。
例如:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
更复杂的是,上述错误“随机”发生在每 100 个相同 XML 标记实例中的 1 个。这意味着输入 XML 文件有大约 100 个包含 <temperature>-125</temperature> 的标签,但其中只有一个会产生 <sensitivity>5</sensitivity> 的输出。其他标签准确生成<sensitivity>-125</sensitivity>。
我已经重写了抽象的“characters(char[] ch, int start, int length)”方法来简单的抓取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 行的“开始”值对我来说意味着 char[] 字符在这个 XML 标记的中间被重置。并且使用新的 char [] 再次调用字符方法。
有人熟悉这个问题吗?我想知道我是否达到了 char [] 容量的极限。但是快速查询使这不太可能。我的 char [] 似乎正在重置为 ~ 2047 个字符
谢谢,
磅数
【问题讨论】: