【问题标题】:Converting XML to document in java creates null document在java中将XML转换为文档会创建空文档
【发布时间】:2015-10-26 12:54:38
【问题描述】:

我正在尝试解析从 web 下载的 java 中的 xml,遵循此处 (stackoverflow) 和其他来源的示例。

首先我将 xml 打包成一个字符串:

String xml = getXML(url, logger);

如果我此时打印出 xml 字符串:

System.out.println("XML " + xml);

我得到了 xml 的打印输出,所以我假设到目前为止没有错误。 然后我尝试创建一个我可以评估的文档:

InputSource is= new InputSource(new StringReader(xml));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);

如果我在这里打印文档:

System.out.println("Doc: " + doc);

我得到: 文档:[#document: null]

当我稍后尝试使用 Xpath 评估表达式时,我得到 java.lang.NullPointerException 并且当我试图获取根的长度时:

System.out.println("Root length " + rootNode.getLength());

这让我相信文档(以及后来的节点)确实为空。

当我尝试打印输入源或我得到的节点时。

输入源:org.xml.sax.InputSource@29453f44

我不知道如何解释。

谁能看到我做错了什么或提出前进的方向? 提前致谢。

【问题讨论】:

标签: java xml xpath


【解决方案1】:

您可能需要另一种方式将文档呈现为字符串。

对于JDOM

 public static String toString(final Document document) {
   try {
     final ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

     final XMLOutputter outp = new XMLOutputter();
      outp.output(document, out);
     final String string = out.toString("UTF-8");
     return string;
   }
   catch (final Exception e) {
     throw new IllegalStateException("Cannot stringify document.", e);
   }
 }

输出

org.xml.sax.InputSource@29453f44

就是类名 + 实例的哈希码(在 Object 类中定义)。它表示实例的类没有覆盖 toString。

【讨论】:

  • 感谢您的建议。我不认为转换为字符串是问题,当我稍后尝试在文档上使用 Xpath 评估表达式时,我得到一个“空节点”异常,但如果你告诉我 XMLOutputter() 来自哪里,我可以试试看?
  • 这仅适用于您使用 JDOM(其他库可能有类似的类):jdom.org/docs/apidocs/org/jdom2/output/XMLOutputter.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多