【问题标题】:SAXParser sometimes give me back a bad valueSAXParser 有时会给我一个坏值
【发布时间】:2012-07-01 11:16:36
【问题描述】:

这很奇怪..

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

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

WTF?

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

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

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

有什么提示吗?

【问题讨论】:

    标签: android xml saxparser


    【解决方案1】:

    characters 方法可以为一对打开和关闭标签中的文本多次调用。

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

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

    我对@9​​87654321@ 的回答包含一些代码,用于更正用户发布的更完整的代码。阅读这可能对您的代码有所帮助。

    【讨论】:

    • 哦,太好了。这似乎是一个很好的解决方案!很抱歉打扰你,你能给我一个sn-p吗?
    • @Enrichman - 查看我的编辑,并查看我对链接问题的回答中的代码。如果您发布更多处理程序,我可以使用修改后的代码进行更新,但您可以根据其他代码自行完成。
    • 非常清楚!现在一切正常!谢谢!我真的以为该方法会被调用一次,但我错了。很幸运我在线找到了 SAXParser 专家!! ;D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多