我正在尝试使用 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/