Синтаксический анализ 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");
Текст между элементами представлен как дочерние узлы. Пустой элемент, вероятно, не имеет дочернего текстового узла, поэтому вы должны
- получить замечание
- проверить, есть ли дочерний текстовый узел, если не создать его
- установить текст