Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理XML Java中不存在的节点_Java_Xml_Nullpointerexception_Marc - Fatal编程技术网

处理XML Java中不存在的节点

处理XML Java中不存在的节点,java,xml,nullpointerexception,marc,Java,Xml,Nullpointerexception,Marc,我必须以MARC格式处理各种XML文件。文件包含不同的字段,有时字段可能会丢失。在这种特殊情况下,作者字段不存在,应将其保存为空字符串 在尝试访问某个节点的值之前,如何检查该节点是否存在? 如果我尝试访问不存在的节点,程序将抛出NullPointerException // xml document is valid and existing nodes can be accessed without a problem final Document doc = record.getDocume

我必须以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文件中不存在,节点列表仍然包含一个元素

String xpath = "//mx:datafield[@tag='100']/mx:subfield[@code='a']";
List<Node> nodes = doc.selectNodes(xpath); //contains one element
String xpath=“//mx:datafield[@tag='100']]/mx:subfield[@code='a']”;
列表节点=doc.selectNodes(xpath)//包含一个元素

问题在于您检查了文档的存在性(
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();
}
p、 s:我不知道
节点的本质,我只是把它当作伪代码