Java – Leer archivo XML

La lectura de archivos XML por este método es relativamente sencilla pero costosa por el uso de memoria y tiempo de ejecución.
El archivo que usaremos para lectura en este ejemplo es el siguiente:

datos.xml

<?xml version="1.0"?>
<empresa>
 <empleado id="1">
 <nombre>José Ernesto</nombre>
 <username>jose</username>
 <password>321423</password>
 </empleado>
 <empleado id="2">
 <nombre>Daniel Pérez</nombre>
 <username>dperez</username>
 <password>433543</password>
 </empleado>
</empresa>




Usaremos las librerías de dom del repositorio de Maven.

<dependency>
 <groupId>org.w3c</groupId>
 <artifactId>dom</artifactId>
 <version>2.3.0-jaxb-1.0.6</version>
</dependency>

Finalmente el código.

package com.decodigo.ejemplos;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *
 * @author decodigo
 */
public class CrearXml {

    public static void main(String args[]) {
        try {
            File archivo = new File("/ruta/datos.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
            Document document = documentBuilder.parse(archivo);

            document.getDocumentElement().normalize();
            System.out.println("Elemento raiz:" + document.getDocumentElement().getNodeName());
            NodeList listaEmpleados = document.getElementsByTagName("empleado");

            for (int temp = 0; temp < listaEmpleados.getLength(); temp++) {
                Node nodo = listaEmpleados.item(temp);
                System.out.println("Elemento:" + nodo.getNodeName());
                if (nodo.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) nodo;
                    System.out.println("id: " + element.getAttribute("id"));
                    System.out.println("Nombre: " + element.getElementsByTagName("nombre").item(0).getTextContent());
                    System.out.println("username: " + element.getElementsByTagName("username").item(0).getTextContent());
                    System.out.println("password: " + element.getElementsByTagName("321423").item(0).getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Como puedes ver DocumentBuilder nos permite parsear el archivo XML.

La función document.getDocumentElement().normalize();  le da al texto un formato visual más agradable pero no es indispensable.

La función de NodeList listaEmpleados = document.getElementsByTagName(“empleado”); es básicamente la de obtener la lista de nodos empleado que vienen en nuestro archivo XML.  Es necesario conocer la estructura de los nodos XML que vienen en el archivo para extraer información específica.  Después de leer cada nodo empleado es posible obtener los atributos del mismo usando element.getAttribute(“id”) o si es necesario el contenido de texto de un nodo particular como en element.getElementsByTagName(“nombre”).item(0).getTextContent().

Existen otros métodos de lectura que veremos próximamente.