XML - Extraer información de un nodo

 
Vista:

Extraer información de un nodo

Publicado por Ale (1 intervención) el 04/04/2007 10:55:17
Tengo el siguiente xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<lista>
<elemento name="elem1">
<campo>Valor campo 1</campo>
</elemento>
<elemento name="elem2">
<campo>Valor campo 2</campo>
</elemento>
</lista>

del que quiero extraer el contenido de los nodos 'campo', es decir "Valor campo 1" y "Valor campo 2".

Tengo el siguiente código:

DOMParser p = new DOMParser();
try {
p.parse(pathOrigen);
} catch (SAXException e) {
System.out.println("Excepcion SAX");
} catch (IOException e) {
System.out.println("Excepcion IO");
}

Document docXML = p.getDocument();
NodeList nodosHijos = docXML.getElementsByTagName("campo");
int longitud = nodosHijos.getLength();

for (int i = 0; i < longitud; i++) {
Node aux = nodosHijos.item(i);
String valor = aux.getNodeValue(); //<------ linea donde no sé que poner
System.out.println(valor);
}

Pero obtengo siempre valor = null.
Los atributos (por ejemplo, 'name' en 'elemento') no tengo problemas en obtenerlos, pero de la otra forma no puedo.

Alguna idea?

Gracias y saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Obtener el contenido de nodos específicos en Java

Publicado por Alejandro (258 intervenciones) el 14/07/2023 17:33:26
En el código que proporcionas, estás obteniendo el valor de los nodos "campo" de manera incorrecta. En lugar de utilizar `getNodeValue()`, debes utilizar `getTextContent()` para obtener el contenido de texto de un nodo. Aquí está la corrección que puedes hacer en tu código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DOMParser p = new DOMParser();
try {
    p.parse(pathOrigen);
} catch (SAXException e) {
    System.out.println("Excepcion SAX");
} catch (IOException e) {
    System.out.println("Excepcion IO");
}
 
Document docXML = p.getDocument();
NodeList nodosHijos = docXML.getElementsByTagName("campo");
int longitud = nodosHijos.getLength();
 
for (int i = 0; i < longitud; i++) {
    Node aux = nodosHijos.item(i);
    String valor = aux.getTextContent();
    System.out.println(valor);
}

Al utilizar `getTextContent()`, obtendrás el contenido de texto dentro del nodo "campo" correctamente. Con este cambio, el código debería imprimir los valores "Valor campo 1" y "Valor campo 2" en la consola.

Espero que esto solucione tu problema y puedas obtener el contenido deseado de los nodos "campo" en tu archivo XML.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar