未能将字符串解析为文档
任何人都可以告诉我该代码如何导致空文档,但不会抛出异常吗?未能将字符串解析为文档
document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader("<?xml version=\"1.0\"?><company>test</company>")));
原:
private Document load(String message) throws MessagingException, IOException { Document document = null;
try {
document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(message.substring(message.indexOf(XML_BEGIN),
message.indexOf(XML_END)))));
}
catch (Exception e) {
e.printStackTrace();
}
...
Element element = document.getElementById(TIME_STAMP);
结果:
java.lang.NullPointerException at ...view.MailReceiver.parse(MailReceiver.java:156)
at ...view.MailReceiver.notify(MailReceiver.java:99)
at ...view.MailReceiver.main(MailReceiver.java:72)
回答:
我没有看到文件是null
。
// Parse XML into Document. String xml = "<?xml version=\"1.0\"?><company>test</company>";
Document document = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(xml)));
// Format Document to XML again.
StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(writer));
System.err.println(writer);
打印出
<?xml version="1.0" encoding="UTF-8" standalone="no"?><company>test</company>
所以document
是不为空。
打印出来document
给你[#document: null]
,因为它提到null
这可能是一个有点混乱。但是,这不会使document
本身null
。
回答:
在您的原始代码中,我怀疑XML由于子字符串稍微“关闭”而严重形成。
当你在寻找你的“XML_END”字符串时,假设它实际上是你想要解析的XML的一部分(例如“”作为一个随机的例子),你还必须添加这个字符串的长度,否则你会缺少部分XML。
另外substring在endIndex上是独占的,所以你可能也需要一个+1。
要开始检查所有这些,我将XML字符串(子字符串后)分配给一个变量并使用log4j(或System.out.println)进行记录以查看。
在您的原始代码中,如果出现分析异常,那么您将直接使用空文档 - 不好!可能是你的NullPointerException的原因。通常你会在catch块中抛出一个异常。
以上是 未能将字符串解析为文档 的全部内容, 来源链接: utcz.com/qa/259034.html