java - DocumentBuilder.parse(InputStream) 返回 null

标签 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 的空值,尽管我有有效的 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/

相关文章:

java - 如何比较java中的文档对象与.xsd文件?

java - 使用 Transformer 处理空 CDATA 时出现 IndexOutOfBoundsException

java - 使用 JAXB 解码 xml 字符串但得到空字符串

java - 元素类型 "META"必须由匹配的结束标记 "</META>"终止。使用 XSL 从 XML 文件生成 PDF 时

java - JDialog 弹出窗口太小

java - Android Studio 拒绝运行 main()

java - 实时过滤输入?

java - 如何使用 JAXB 序列化多个对象

java - 递归和辅助方法在查找字符出现时有用吗?

r -//parent::* 在 XPath 中?