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

标签 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);
                }

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

最佳答案

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

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

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

关于java - XML DOM 解析,在每个 getNodeValue() 上获取 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736457/

相关文章:

Java SWT 使标签可滚动

java - 垂直居中 ListView

java - 使用Java获取XML子元素

java - 如何制作这个菜单

javascript - 调用 Ext.menu.Menu 实例时获取 ExtJS Selection 对象

java - 具有多个接口(interface)的类

java - 仅使用添加和删除来交换列表中的项目

java - 为 JFrame 创建滚动条

javascript - 在 jQuery 中结合查找/过滤功能,同时定位 DOM 元素

javascript - 无法设置属性值 'innerHTML' : object is null or undefined