我正在修复有关 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 的空值,尽管我有有效的 theOutput 和 xmlSource 变量值。请帮忙。
谢谢!
最佳答案
流被正确解析的可能性很大,只是因为
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)。
关于java - DocumentBuilder.parse(InputStream) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018868/