我正在尝试使用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);
}
这可能是一个非常简单的问题,但找不到答案...... :( 提前谢谢!
答案 0 :(得分:1)
元素本身实际上没有值,但 有一个文本节点作为子节点:
<root>
<seguro>
<seg_tipo>
#text: cocacola
要获取元素(及其所有后代)中的文本,请使用getTextContent()
而不是getNodeValue()
。