【问题标题】:parsing XML tag with no data. getting NullPointerException解析没有数据的 XML 标记。获取 NullPointerException
【发布时间】:2011-07-30 11:47:26
【问题描述】:

我有一个没有数据的xml(例如remark标签的数据),所以我尝试更新remark标签的内容,但我得到了一个N​​ullPointerException。

这是我使用的示例代码。

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>

有没有人可以解决这个问题?

【问题讨论】:

    标签: java xml dom xmlupdate


    【解决方案1】:

    您需要为空文本节点添加一个空检查并根据需要创建它们:

    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");
    

    【讨论】:

    • 但是已经有remark节点了,如果我创建它,那它不会是多余的吗?我的意思是再次添加相同的标签!
    • 元素节点存在,但没有子文本节点。它为您提供 null 而不是空文本节点。你只需要填写它。如果有帮助,我验证它有效:)
    【解决方案2】:

    元素之间的文本表示为节点子节点。一个空元素可能没有文本节点子节点,所以你必须

    1. 得到备注
    2. 检查是否有文本节点子节点,如果没有则创建它
    3. 设置文字

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2012-01-24
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多