解析没有数据的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");
答
元素之间的文本被表示为节点的孩子。空元素可能没有一个文本子节点,所以你必须
- 得到此言
- 检查,如果有一个文本节点孩子,如果不能创建它
- 设置文本
但是已经有了一个备注节点,所以如果我创建它,那么它不会是多余的吗?我的意思是再次添加相同的标签! – Sana 2011-04-06 03:59:13
元素节点在那里,但它没有子文本节点。它给你一个null而不是一个空的文本节点。你只需要填写。我证实它的工作原理,如果有帮助:) – WhiteFang34 2011-04-06 04:03:33