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