解析没有数据的XML标记。获取NullPointerException

问题描述:

我有一个没有数据的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> 

没有人有这种情况的解决方案?

你需要添加空文本节点空校验,并根据需要创建它们:

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. 得到此言
  2. 检查,如果有一个文本节点孩子,如果不能创建它
  3. 设置文本