【问题标题】:How to convert InputStream to InputSource?如何将 InputStream 转换为 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)”。

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

谢谢。

【问题讨论】:

    标签: java xml inputstream sax


    【解决方案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 并将其内容包含在已解析的实体中。
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 2011-04-12
    • 2011-12-12
    • 2011-02-19
    • 2016-04-11
    • 2020-02-27
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多