Работа с несуществующими узлами в XML Java - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно обработать множество файлов XML в формате MARC.Файлы содержат разные поля, а иногда поля могут отсутствовать.В этом конкретном случае авторское поле не существует, и его следует сохранить как пустую строку.

Как я могу проверить, существует ли узел, прежде чем пытаться получить доступ к его значению?

Если я пытаюсь получить доступ к несуществующему узлу, программа выдает исключение NullPointerException.

// xml document is valid and existing nodes can be accessed without a problem
final Document doc = record.getDocument(); 
String author = "";
if (doc != null) {
    // The next line throws a NullPointerException
    author = doc.selectSingleNode("//mx:datafield[@tag='100']/mx:subfield[@code='a']").getText();
}

Я попытался создать список с узлами, а затем проверить, не является ли он пустым.Однако, даже если поле не существует в файле xml, список узлов по-прежнему содержит один элемент.

String xpath = "//mx:datafield[@tag='100']/mx:subfield[@code='a']";
List<Node> nodes = doc.selectNodes(xpath); //contains one element

1 Ответ

0 голосов
/ 22 февраля 2019

Проблема в том, что вы проверяете наличие документа (doc!=null), но не существование узла.Проверьте это так, например:

final Document doc = record.getDocument(); 
String author = "";

if (doc != null)
{   
    Node node = doc.selectSingleNode("//mx:datafield[@tag='100']/mx:subfield[@code='a']")
    if (node!=null)
      author = node.getText();
}

ps: я не знаю природу Node, я просто обозначил это как псевдокод.

...