2014-11-02 129 views
0

XML文件包含Employee(具有empID,empName,empCode)。在某些情况下,empCode缺失。DOM - XML文档中缺少元素

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

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

我收到空指针异常,同时呼吁“empCode”,因为没有可用的XML名称标签getTagValue()方法。

Java代码:

尝试 { 文件XMLFILE =新的文件( “New.xml”);

  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一个 2阿米特空

我试过很多的联系,但没有成功。有人可以帮我

回答

0

如果这是可能的,没有这样的值,然后简单地处理一下这样的:

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

关于以将它们添加到SQL,做同样的检查,同时创造你的发言。由于SQL NULL类型存在

+0

嗨罗宾,我仍面临着同样的问题 – abhinav44 2014-11-02 15:42:19

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;