DocumentBuilder.parse(InputStream) 返回 null

2022-09-01 12:56:05

我正在修复有关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的空值,尽管我有Output和xmlSource变量的有效值。请帮忙。

谢谢!


答案 1

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

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

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


答案 2

推荐