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