【问题标题】:Characters Method not Capturing all Data for Element - SAX Parser - Java字符方法未捕获元素的所有数据 - SAX 解析器 - Java
【发布时间】:2012-05-09 12:52:56
【问题描述】:

我正在使用 SAX 解析器解析 XML 文档。我正在使用字符方法来捕获两个元素标签之间提供的数据,考虑到数据将以块的形式提供:

StringBuilder currentText = new StringBuilder();

...

public void characters(char ch[], int start, int length) {
        if (currentText!=null) {
            for (int i=start; i<start+length; i++) {
                currentText.append(ch[i]);
            }

然后在我使用的 endElement 方法中:

public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        System.out.println("Current Text is " + currentText.toString());
        currentText.setLength(0);

}

问题是当我查看日志时,currentText 没有捕获 XML 中一些较大数据字段的全部内容。

有人知道为什么会这样吗?

谢谢。

【问题讨论】:

  • 嗨,UNNI。我正在查看的一个元素包含 15516 个项目,每个项目都是 6 位数的浮点数。
  • 数字是用逗号分隔的吗?
  • 否 - 它们用空格分隔。
  • 嗯,不要依赖 logcat 打印 15516 个 6 位浮点数供您分析.. 您是否尝试将 currentText 写入 SDCARD 上的文件,把它拉到你的电脑上然后在那里浏览?

标签: java android xml xml-parsing sax


【解决方案1】:

嗯,currentText==null 总是有可能的——你可以消除这种可能性,我们不能。

请注意,执行追加的字符循环非常低效:您可以使用

public StringBuilder append(char str[], int offset, int len)

您可能会丢失一些向 ignorableWhitespace 回调报告的空格,但我想如果只是缺少空格,您会告诉我们的。

抱歉,不能再推荐了。遵循我祖母的座右铭:如果您正在寻找某样东西却找不到,那意味着您找错了地方;所以去别处看看。

【讨论】:

  • 谢谢迈克尔 - 我喜欢这个座右铭,结果证明它是正确的。在发现 logcat TRUNCATES STRINGS 之前,我已经浪费了几个小时。 (深呼吸)。一切实际上都运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多