Imprimir

En el siguiente ejemplo se hace un recorrido por un fichero XML de nombre "empleados.xml" que contiene una lista con la siguiente estructura de empleados con algunos de sus datos:

<?xml version="1.0" encoding="UTF-8"?>
<EMPLEADOS>
   <EMPLEADO>
     <NOMBRE>LUIS MIGUEL</NOMBRE>
     <APELLIDOS>GALLARDO LEON</APELLIDOS>
     <NIF>5674179P</NIF>
     <EMPRESA>DATATONIC, S.A.</EMPRESA>
     <DIRECCION>HERMANOS ARAGON , CALLE</DIRECCION>
     <CP>11690</CP>
     <LOCALIDAD>OLVERA</LOCALIDAD>
     <TLF_FIJO>95630316</TLF_FIJO>
     <TLF_MOVIL>69619915</TLF_MOVIL>
   </EMPLEADO>
   <EMPLEADO>
     <NOMBRE>MIGUEL</NOMBRE>
     <APELLIDOS>BERENGUEL MARQUINA</APELLIDOS>
     <NIF>6182669F</NIF>
     <EMPRESA>MAGARIIT SERVICES, S.A.</EMPRESA>
     <DIRECCION>ALCALA LA REAL , CALLE</DIRECCION>
     <CP>11640</CP>
     <LOCALIDAD>BORNOS</LOCALIDAD>
     <TLF_FIJO>96304400</TLF_FIJO>
     <TLF_MOVIL>62676864</TLF_MOVIL>
   </EMPLEADO>
</EMPLEADOS>

El código Java para recorrer y mostrar su contenido siguiendo el modelo DOM es el siguiente:

try {
    DocumentBuilderFactory fábricaCreadorDocumento = DocumentBuilderFactory.newInstance();
    DocumentBuilder creadorDocumento = fábricaCreadorDocumento.newDocumentBuilder();
    Document documento = creadorDocumento.parse("empleados.xml");
    //Obtener el elemento raíz del documento
    Element raiz = documento.getDocumentElement();
//Obtener la lista de nodos que tienen etiqueta "EMPLEADO" NodeList listaEmpleados = raiz.getElementsByTagName("EMPLEADO"); //Recorrer la lista de empleados for(int i=0; i<listaEmpleados.getLength(); i++) { //Obtener de la lista un empleado tras otro Node empleado = listaEmpleados.item(i); System.out.println("Empleado "+i); System.out.println("==========");
//Obtener la lista de los datos que contiene ese empleado NodeList datosEmpleado = empleado.getChildNodes(); //Recorrer la lista de los datos que contiene el empleado for(int j=0; j<datosEmpleado.getLength(); j++) { //Obtener de la lista de datos un dato tras otro Node dato = datosEmpleado.item(j);
//Comprobar que el dato se trata de un nodo de tipo Element if(dato.getNodeType()==Node.ELEMENT_NODE) { //Mostrar el nombre del tipo de dato System.out.print(dato.getNodeName()+": "); //El valor está contenido en un hijo del nodo Element Node datoContenido = dato.getFirstChild(); //Mostrar el valor contenido en el nodo que debe ser de tipo Text if(datoContenido!=null && datoContenido.getNodeType()==Node.TEXT_NODE) System.out.println(datoContenido.getNodeValue()); } } //Se deja un salto de línea de separación entre cada empleado System.out.println(); }   } catch (SAXException ex) { System.out.println("ERROR: El formato XML del fichero no es correcto\n"+ex.getMessage()); ex.printStackTrace(); } catch (IOException ex) { System.out.println("ERROR: Se ha producido un error el leer el fichero\n"+ex.getMessage()); ex.printStackTrace(); } catch (ParserConfigurationException ex) { System.out.println("ERROR: No se ha podido crear el generador de documentos XML\n"+ex.getMessage()); ex.printStackTrace(); }

Se obtiene por la salida estándar algo similar a lo siguiente:

Empleado 0
==========
NOMBRE: LUIS MIGUEL
APELLIDOS: GALLARDO LEON
NIF: 5674179P
EMPRESA: DATATONIC, S.A.
DIRECCION: HERMANOS ARAGON , CALLE
CP: 11690
LOCALIDAD: OLVERA
TLF_FIJO: 95630316
TLF_MOVIL: 69619915

Empleado 1
==========
NOMBRE: MIGUEL
APELLIDOS: BERENGUEL MARQUINA
NIF: 61826629F
EMPRESA: MAGARIIT SERVICES, S.A.
DIRECCION: ALCALA LA REAL , CALLE
CP: 11640
LOCALIDAD: BORNOS
TLF_FIJO: 96304400
TLF_MOVIL: 62676864