3

我有一个如下的 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();
}            

userNotes但是上面的代码由于元素为空而引发了 NULL 指针错误。

有想法该怎么解决这个吗?

4

1 回答 1

8

(更正)

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();
}
于 2012-09-27T15:59:20.420 回答