DocumentBuilder.parse(InputStream)返回null

时间:2010-01-07 07:29:37

标签: java xml

我正在修复有关DocumentBuilder.parse的现有代码的错误。我有以下代码:

 String theOutput;
    theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString();
    StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream(), "http://sampleApps.net/static/dataDef1.1.dtd");                                         
    Document xmlDoc = dBuilder.parse(xmlSource.getInputStream());

我不明白为什么我为xmlDoc获取空值虽然我有输出和xmlSource变量的有效值。请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:45)

很有可能流解析正确,只是因为 xmlDoc.toString()始终为"[#document: null]"。这并不表示DOM树是空的。如果文档中有一些节点(子节点),请先检查。

如果DOM确实是空的,那么我首先将输入流的内容打印到控制台(可能xmlSource.getInputStream().toString()已经返回内容)以检查内容是否格式正确,仔细检查如果dtd文件是可访问的(浏览器),最后将XML文档和dtd转储到文件中以检查XML内容是否有效。

啊,等一下,我认为第二个参数是DTD文件的URI,但字符串是xml文档的systemId(public StreamSource(InputStream inputStream, String systemId))。也许这是一个问题 - StreamSource类将使用此URI来解析相对URI(如您的DTD)。