DOM - XML文档中缺少元素

时间:2014-11-02 14:35:15

标签: java xml parsing dom

XML文件包含Employee(带有empID,empName,empCode)。在某些情况下,empCode缺失。

<Employee><Detail><empID>1</empID><empName>Abhi</empName><empCode>One</empCode>
</Detail>

<Detail><empID>2</empID><empName>Amit</empName>
</Detail>
</Employee>

我在调用&#34; empCode&#34;的getTagValue()方法时得到Null指针异常。因为XML中没有可用的名称标记。

Java代码:

试          {              文件xmlFile =新文件(&#34; New.xml&#34;);

         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("Detail");
            for (int temp = 0; temp < nList.getLength(); temp++) 
            {
                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) 
                {
                    Element eElement = (Element) nNode;
                    EmpDetail empInfo = new EmpDetail();

                    empInfo.SetEmpID(getTagValue("empID", eElement));
                    empInfo.SetEmpName(getTagValue("empName",eElement));
                    empInfo.SetEmpCode(getTagValue("empCode",eElement));

                    DBConnector.SaveinDB(empInfo);
                }

            }
     }
     catch (Exception e) 
     {
         System.out.println("Error: ");
         e.printStackTrace();
     }
 }

 private static String getTagValue(String sTag, Element eElement) 
 {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
        Node nValue = (Node) nlList.item(0);
        if(nValue == null) 
            return null;
        return insertEscapeSequance(nValue.getNodeValue());
      }

 private static String insertEscapeSequance(String str)
 {
     String returnstr = "";
     String[] strarr = str.split("'");
     returnstr = strarr[0];
     for(int i=1;i<strarr.length;i++)
     {
         returnstr = returnstr + "\\'" + strarr[i];
     }
     return returnstr;
}

现在我想将XML数据保存到sql中,如下所示:

1 Abhi One 2 Amit null

我尝试了很多链接但没有成功。有人可以帮助我吗

2 个答案:

答案 0 :(得分:0)

如果可能没有这样的值,那么只需处理它:

if(getTagValue("empCode",eElement) != null){
    empInfo.SetEmpCode(getTagValue("empCode",eElement));
}

关于将它们添加到SQL中,请在创建语句时执行相同的检查。由于存在SQL NULL类型

答案 1 :(得分:0)

问题是由eElement.getElementsByTagName(sTag).item(0)引起的。该语句返回sTag指定的第一个节点。对于empCode,返回null,调用getChildNodes()将引发空指针异常。

尝试:

Node node = eElement.getElementsByTagName(sTag).item(0);
if (node != null) {
    Node nValue =  node.getChildNodes().item(0);
    if (nValue != null) {
        return insertEscapeSequance(nValue.getNodeValue());
    }
}
return null;