如何将 InputStream 转换为 InputSource?

Posted

技术标签:

【中文标题】如何将 InputStream 转换为 InputSource?【英文标题】:How to convert InputStream to InputSource? 【发布时间】:2013-06-11 16:46:31 【问题描述】:

所有,

我写了一个简单的 SAX XML 解析器。它可以工作,我正在使用本地 XML 文件对其进行测试。这是我的代码:

SAXParserFactory spf = SAXParserFactory.newInstance();
XMLParser xmlparser = null;
try

    SAXParser parser = spf.newSAXParser();
    XMLReader reader = parser.getXMLReader();
    xmlparser = new XMLParser();
    reader.setContentHandler( xmlparser );
    reader.parse( new InputSource( getResources().openRawResource( R.raw.categories ) ) );

现在我需要从网站上读取这个 XML 文件。我正在尝试的代码是:

public InputStream getXMLFile()

    URL url = new URL("http://example.com/test.php?param=0");
    InputStream stream = url.openStream();
    Document doc = docBuilder.parse(stream);

reader.parse( new Communicator().getXMLFile() );

我收到编译器错误

“方法 parse(InputSource) 不适用于参数 (InputStream)”。

我需要帮助弄清楚我需要什么。

谢谢。

【问题讨论】:

【参考方案1】:

虽然我不想听起来很明显,但你有什么理由不使用this constructor?

InputSource source = new InputSource(stream);
Document doc = docBuilder.parse(source);

请注意,这与您在第一部分代码中所做的非常相似。毕竟,openRawResource 也会返回一个 InputStream...

【讨论】:

如果您使用 JUST 流作为源,则解析器没有关于流来自何处的信息。如果您从 URL 构造源,那么它可以使用此信息来构造引用文档的 URL。例如,如果您启用 XInclude 并且您的 XML 流包含 那么如果您正在解析 strem,则解析器将无法解析 other.xml。但是,如果您从 URL 创建源,它可以取消引用 other.xml 并将其内容包含在已解析的实体中。

以上是关于如何将 InputStream 转换为 InputSource?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 InputStream 转换为 DataHandler?

如何将 InputStream 转换为 InputSource?

如何将 Reader 转换为 InputStream 并将 Writer 转换为 OutputStream?

如何将 Source[ByteString, Any] 转换为 InputStream

将 inputStream 转换为 FileInputStream?

在 Java 中,如何将 InputStream 转换为字节数组 (byte[])? [复制]