繁体   English   中英

如何使用Java的SAX Parser从URL数组一次解析多个XML feed?

[英]How to parse multiple XML feeds at once from an array of URLs with SAX Parser for Java?

我正在使用一个Android应用程序,该应用程序根据用户首选项分析一个或多个XML提要。 通过为解析器提供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标头,例如

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

这也是无效的。

尽管可以对输入进行预处理以解决这些问题,但最好还是分别解析它们,然后再处理合并结果。

可以使SAX解析器将已解析的元素添加到现有的元素列表中。 如果您在问题中张贴代码以显示如何解析单个文件,我们也许可以帮助您确定如何根据您的多个输入需求进行调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM