XML DOM解析,在每个getNodeValue()上获取NULL

时间:2014-05-19 11:22:07

标签: java xml dom xml-parsing

我正在尝试使用DOM解析XML文件。但是我从节点获取NULL值,即使你在XML文件中看到它们都有值......我已经尝试了一段时间但是找不到解决这个问题的方法。我是java编程的新手,所以它可能是一个新手错误,但我现在变得非常沮丧......

这是我正在解析的XML:

<root>
  <seguro>
      <seg_tipo>cocacola</seg_tipo> 
      <seg_subtipo>cocacola</seg_subtipo> 
      <seg_title>cocacola</seg_title> 
      <seg_descr>cocacola</seg_descr> 
      <seg_carac_title>cocacola</seg_carac_title> 
      <seg_carac>cocacola</seg_carac> 
  </seguro>
  <seguro>
     <seg_tipo>fantanaranja</seg_tipo> 
     <seg_subtipo>fantanaranja</seg_subtipo> 
     <seg_title>fantanaranja</seg_title> 
     <seg_descr>fantanaranja</seg_descr> 
     <seg_carac_title>fantanaranja</seg_carac_title> 
     <seg_carac>fantanaranja</seg_carac> 
  </seguro>
</root>

我已经设置了一些System.out.println()来告诉我节点的名称和值,这就是我得到的:

seg_tipo -- null
seg_subtipo -- null
seg_title -- null
seg_descr -- null
seg_carac_title -- null
seg_carac -- null
/n-------------------------------------/n
seg_tipo -- null
seg_subtipo -- null
seg_title -- null
seg_descr -- null
seg_carac_title -- null
seg_carac -- null
/n-------------------------------------/n

我无法让它工作......这是解析XML的代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                File fileXML = new File("seguros.xml");
                Document document = builder.parse(fileXML);

                Element root = document.getDocumentElement();
                NodeList items = root.getElementsByTagName("seguro");
//                System.out.println(items.getLength());
//                System.out.println(items.item(1).getNodeName());

                for (int i = 0; i < items.getLength(); i++) {
                    Seguro seguroActual = new Seguro();
                    Node item = items.item(i);
                    NodeList datosSeguro = item.getChildNodes();
                    for (int j = 0; j < datosSeguro.getLength(); j++) {
//                        System.out.println(datosSeguro.getLength());
                        Node dato = datosSeguro.item(j);
                        String etiqueta = dato.getNodeName();
                        System.out.println(dato.getNodeName()+" -- "+dato.getNodeValue());

                        if (etiqueta.equals("seg_tipo")) {
                            seguroActual.setSeg_tipo(dato.getNodeValue());
//                            System.out.println("El tipo del seguro es: " + dato.getNodeValue());
                        } else if (etiqueta.equals("seg_subtipo")) {
                            seguroActual.setSeg_subtipo(dato.getNodeValue());
//                            System.out.println("El subtipo del seguro es: " + seguroActual.getSeg_subtipo());
                        }
                    }
                    System.out.println("/n-------------------------------------/n");
                    AlmacenSeguros.getInstance().guardarSeguro(seguroActual);
                }

这可能是一个非常简单的问题,但找不到答案...... :( 提前谢谢!

1 个答案:

答案 0 :(得分:1)

元素本身实际上没有值,但 有一个文本节点作为子节点:

<root>
  <seguro>
    <seg_tipo>
      #text: cocacola

要获取元素(及其所有后代)中的文本,请使用getTextContent()而不是getNodeValue()