【问题标题】:How to parse multiple XML feeds at once from an array of URLs with SAX Parser for Java?如何使用 SAX Parser for Java 从一组 URL 中一次解析多个 XML 提要?
【发布时间】:2011-05-15 14:51:20
【问题描述】:

我正在开发一个基于用户偏好解析一个或多个 XML 提要的 Android 应用程序。是否可以通过向解析器提供一组我的 XML 提要的 URL 来一次解析(使用 SAX 解析器)多个 XML 提要?

如果不是,将来自不同 XML 提要的已解析项目列在一个列表中的另一种方法是什么?一种直观的方法是使用java.io.SequenceInputStream 来合并两个输入流。但是,这会引发 NullPointerException:

try {
  URL urlOne = new URL("http://example.com/feedone.xml");
  URL urlTwo = new URL("http://example.com/feedtwo.xml");
  InputStream streamOne = urlOne.openStream();
  InputStream streamTwo = urlTwo.openStream();
  InputStream streamBoth = new SequenceInputStream(streamOne, streamTwo);
  InputSource sourceBoth = new InputSource(streamBoth);
  //Parsing
  stream = xmlHandler.getStream();
  }
catch (Exception error) {
  error.printStackTrace();
}
List<Item> content = stream.getList();
return content;

【问题讨论】:

  • 需要更多信息:您在哪里将 InputSource 分配给 SAXParser? xmlHandler 和 getStream() 方法的结果是什么对象?您实际使用的是 SAX 还是 StAX API?
  • 托马斯,感谢您的帮助。我最终使用了 Don 建议的解决方案 - 这比在解析流之前尝试附加流更有意义。

标签: java android parsing merge


【解决方案1】:

在解析之前附加流的策略不太可能运作良好,因为附加的 XML 将不是有效的 XML。由于每个 XML 输入都有自己的根元素,附加的 XML 将有多个根,这在 XML 中是不允许的。此外,它可能有多个 XML 标头,例如

<?xml version="1.0" encoding="UTF-8"?>

这也是无效的。

虽然可以对输入进行预处理以解决这些问题,但您最好单独解析它们并在稍后将结果合并处理。

可以让 SAX 解析器将解析的元素添加到现有的元素列表中。如果您在问题中发布代码以显示您如何解析单个文件,我们可能会帮助您弄清楚如何根据您对多个输入的需要进行调整。

【讨论】:

  • 唐,谢谢你的回答。我从未想过尝试简单地加入多个 XML 提要在概念上是错误的。最后,我按照您的建议解决了这个问题 - 通过单独解析提要并组合它们的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多