Синтаксический анализ XML-тега без данных. получение 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");

Текст между элементами представлен как дочерние узлы. Пустой элемент, вероятно, не имеет дочернего текстового узла, поэтому вы должны

  1. получить замечание
  2. проверить, есть ли дочерний текстовый узел, если не создать его
  3. установить текст
Другие вопросы по тегам