android - SAXParser 有时会返回一个错误的值

标签 android xml saxparser

这很奇怪..

我有一个 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);
    }

有什么提示吗?

最佳答案

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

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

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

我对 this question where the user was making the same mistake 的回答包含一些执行此操作的代码以更正用户发布的更完整的代码。阅读可能对您的代码有所帮助。

关于android - SAXParser 有时会返回一个错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281491/

相关文章:

android - 当 PriorityQueue.size() > 0 时,为什么 PriorityQueue.peek() 返回 null

ios - iTMSTransporter失败,错误为-20101

xml - 如何在 Odoo 中打开现有 View 但禁用其创建按钮?

java - cxf-codegen-plugin 解析 wsdl 时失败(JSXB : undefined attribute 'xml:lang' )

android - 使用 NameValuePair 将整数发送到 HTTP 服务器

javascript - 如何从切换按钮是/否获取值(value)并在按钮 Activity 中显示检索数据

java - 我想要一个集中的方式来控制我的按钮

java - JAXB xs :maxLength and minOccurs ="0" didn't show in generated class by xsd

Android - 使用 SAXParser 的通用 XML 解析器

java - 使用 saxparser 验证本地位置的模式文件