【问题标题】:DOM - Missing Element in XML DocumentDOM - XML 文档中缺少元素
【发布时间】:2014-11-02 14:35:14
【问题描述】:

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>

我在为“empCode”调用 getTagValue() 方法时收到 Null 指针异常,因为 XML 中的名称没有可用的标签。

Java 代码:

试试 { 文件 xmlFile = new File("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 阿比一号 2 阿米特空

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

【问题讨论】:

    标签: java xml parsing dom


    【解决方案1】:

    如果可能没有这样的值,那么简单地处理它:

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

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

    【讨论】:

    • 嗨罗宾,我仍然面临同样的问题
    【解决方案2】:

    问题是由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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多