MARC 形式のさまざまな XML ファイルを処理する必要があります。ファイルにはさまざまなフィールドが含まれており、フィールドが欠落している場合があります。この特定のケースでは、作成者のフィールドは存在しないため、空の文字列として保存する必要があります。
値にアクセスする前に、ノードが存在するかどうかを確認するにはどうすればよいですか?
存在しないノードにアクセスしようとすると、プログラムは 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 ファイルにフィールドが存在しない場合でも、ノードのリストには 1 つの要素が含まれます。
String xpath = "//mx:datafield[@tag='100']/mx:subfield[@code='a']";
List<Node> nodes = doc.selectNodes(xpath); //contains one element