如何在JAVA中检查空XML元素

时间:2012-09-27 15:55:17

标签: java xml-parsing

我有一个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元素是空的。

有关如何解决此问题的任何想法?

1 个答案:

答案 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();
}