1

这很奇怪。。

我有一个 DefaultHandler 实际上可以很好地处理所有事情,但有时,没有明显的原因,它会给我 0 而不是正确的值。每次都在同一个地方发生这种情况,所以出了点问题,但我不知道是什么!

问题是这样的。我正在解析像“17:00:00”这样的时间。当解析器到达“奇怪的时间”时,它会像这样解析它->“17:00:0”,再调用一次方法characters(char[] ch, int start, int end),然后解析最后一个“0”。

怎么回事?

实际上,它将结束设置为 7 而不是 8。这适用于除少数值之外的所有内容!

代码非常简单,它只是一个简单的 saxparser。这是字符方法:

    public void characters(char[] ch, int start, int end) {
    if(on_element)
        value = new String(ch, start, end);
    }

有什么提示吗?

4

1 回答 1

3

characters对于一对打开和关闭标记中的文本,可以多次调用该方法。

您的代码假定它只被调用一次,这通常适用于小数据,但并非总是如此。

您需要在startElement方法中为该标记初始化一个缓冲区,在方法中收集到缓冲区中characters,并将缓冲区转换为endElement.

对用户犯同样错误的这个问题的回答包含一些代码,以更正用户发布的更完整的代码。阅读这可能对您的代码有所帮助。

于 2012-07-01T11:25:49.380 回答