2011-04-06 67 views
0

我有一個沒有數據的XML(例如用於remark標記的數據),所以我嘗試更新remark標記的內容,但是我得到一個NullPointerException。解析沒有數據的XML標記。獲取NullPointerException

這裏是我使用的示例代碼。

NodeList itemCheckedNodeList = positionElement.getElementsByTagName("remark"); 
Element itemCheckedElement = (Element) itemCheckedNodeList.item(0); 
NodeList itemCheckedLN = itemCheckedElement.getChildNodes(); 
Text itemCheckedText = (Text)itemCheckedLN.item(0); 
itemCheckedText.setTextContent("Here is a new comment"); 

,但我得到在異常 「itemCheckedText.setTextContent(comments);

<events> 
     <event> 
     <date>Some date here</date> 
     <time>Some time here</time> 
     <remark>Something about the event</remark> 
     </event> 
     <event> 
     <date>Some date here</date> 
     <time>Some time here</time> 
     <remark></remark> 
     </event> 
</events> 

沒有人有這種情況的解決方案?

回答

2

你需要添加空文本節點空校驗,並根據需要創建它們:

NodeList itemCheckedNodeList = positionElement.getElementsByTagName("remark"); 
Element itemCheckedElement = (Element) itemCheckedNodeList.item(0); 
NodeList itemCheckedLN = itemCheckedElement.getChildNodes(); 
Text itemCheckedText = (Text) itemCheckedLN.item(0); 
if (itemCheckedText == null) { 
    Document doc = itemCheckedElement.getOwnerDocument(); 
    itemCheckedText = doc.createTextNode("remark"); 
    itemCheckedElement.appendChild(itemCheckedText); 
} 
itemCheckedText.setTextContent("Here is a new comment"); 
+0

但是已經有了一個備註節點,所以如果我創建它,那麼它不會是多餘的嗎?我的意思是再次添加相同的標籤! – Sana 2011-04-06 03:59:13

+1

元素節點在那裏,但它沒有子文本節點。它給你一個null而不是一個空的文本節點。你只需要填寫。我證實它的工作原理,如果有幫助:) – WhiteFang34 2011-04-06 04:03:33

1

元素之間的文本被表示爲節點的孩子。空元素可能沒有一個文本子節點,所以你必須

  1. 得到此言
  2. 檢查,如果有一個文本節點孩子,如果不能創建它
  3. 設置文本