我创建了一个扩展 SaxParser DefaultHandler 类的类。我的目的是将 XML 输入存储在一系列对象中,同时保留原始 XML 数据的数据完整性。在测试过程中,我注意到一些节点数据在输入时被任意截断。
例如:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
更复杂的是,上述错误在相同 XML 标记的每 100 个实例中“随机”发生 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 标记,它都会被调用一次。第二行的“start”值对我来说意味着 char[] 字符在此 XML 标记的中间被重置。并且使用新的 char[] 再次调用字符方法。
有人熟悉这个问题吗?我想知道我是否达到了 char [] 容量的限制。但快速查询表明这种情况不太可能发生。我的 char [] 似乎正在重置为 ~ 2047 个字符
Thanks,
LB