我有一个XML如下:
<info>
<userId>Admin</userId>
<userNotes></userNotes>
</info>
我试图在JAVA中解析它。这是我的代码片段:
NodeList userIdNodeList = document.getElementsByTagName("userId");
if (userIdNodeList!=null) {
userId = userIdNodeList.item(0).getChildNodes().item(0).getNodeValue().trim();
}
NodeList userNotesNodeList = document.getElementsByTagName("userNotes");
if (userNotesNodeList!=null) {
userNotes = userNotesNodeList.item(0).getChildNodes().item(0).getNodeValue().trim();
}
但是上面的代码抛出了一个NULL指针错误,因为userNotes
元素是空的。
有关如何解决此问题的任何想法?
答案 0 :(得分:6)
(更正)
如果没有子元素和文本, userNotesNodeList.item(0).getChildNodes().getLength()
将返回0。
<强>为什么强>
userNotesNodeList
是<userNotes>
个节点的列表。有1.无论如何,你可以检查长度来验证它。
userNotesNodeList.item(0)
是第一个<userNotes>
元素。
userNotesNodeList.item(0).getChildNodes()
是<userNotes>...</userNotes>
内的内容列表。
如果没有文本,这是一个具有0个元素的NodeList
userNotesNodeList.item(0).getChildNodes().getLength() should return 0.
我建议使用vars进行中间结果(以制作更清晰的代码)。或者创建一些辅助方法来避免这种繁琐的XML API。
NodeList userNotesNodeList = document.getElementsByTagName("userNotes");
// userNotesNodeList should not be null, it can be zero length, but not null
Element userNotesElement = (Element) userNotesNodeList.item(0);
if (userNotesElement.getChildNodes().getLength() > 0) // then it has text
{
userNotes = userNotesElement.getChildNodes().item(0).getNodeValue();
}