2012-09-27 18 views
1

我有一個XML如下:如何檢查一個空的XML元素JAVA

<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元素爲空。

有關如何解決此問題的任何想法?

+1

您對由getNodeValue返回的null值調用trim。在調用trim之前檢查該方法的結果。 –

回答

4

(更正)

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. 

我建議使用瓦爾爲intermidiate結果(使更清楚的代碼)。或者創建一些輔助方法來避免這種繁瑣的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(); 
}