java - 如何使用 SAX Parser for Java 一次从一组 URL 解析多个 XML 提要?

标签 java android parsing merge

我正在开发一款基于用户偏好解析一个或多个 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;

最佳答案

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

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

这也是无效的。

虽然可以通过预处理输入来解决这些问题,但最好还是分别解析它们,然后再处理合并结果。

可以使 SAX 解析器将已解析的元素添加到现有的元素列表中。如果您在问题中发布代码以显示您如何解析单个文件,我们或许可以帮助您了解如何调整它以满足您对多个输入的需求。

关于java - 如何使用 SAX Parser for Java 一次从一组 URL 解析多个 XML 提要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275818/

相关文章:

java - 如何使用 HttpServletRequest 在 Java 中捕获请求头

java - 如何逐个下载多个pdf文件

android - SURF 和 SIFT 特征检测器 OpenCV android

java - 如何防止HPACK解压失败?

java - 程序抛出堆栈溢出错误

java - 在java8中,添加了哪个类来替换 `sun.beans.editors.StringEditor`

java - 在类之间传递字符串时,Android 应用程序崩溃

javascript - 当字符串没有协议(protocol)时匹配主机名 ://?

python - python中的复杂解析

java - 手动编写命题逻辑解析器