未能将字符串解析为文档

任何人都可以告诉我该代码如何导致空文档,但不会抛出异常吗?未能将字符串解析为文档

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

回到顶部