我正在尝试解析xml,从网上下载,在java中,遵循此处的示例(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);
我得到: Doc:[#document:null]
当我稍后尝试使用Xpath计算表达式时,我得到java.lang.NullPointerException,并且只是在尝试获取根的长度时:
System.out.println("Root length " + rootNode.getLength());
让我相信文档(以及后来的节点)真的是空的。
当我尝试打印输入源或节点时,我得到例如
输入源:org.xml.sax.InputSource@29453f44
我不知道如何解释。
任何人都可以看到我做错了什么或建议前进的方向吗? 提前谢谢。
答案 0 :(得分:0)
您可能需要另一种方法将文档呈现为字符串。
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。