0

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
4

1 に答える 1

1

問題は、ドキュメント ( 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。疑似コードのように入れただけです。

于 2019-02-22T10:21:24.000 に答える