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.


2 thoughts on “Java – Leer archivo XML”

  1. Hola me sirvio bastante tu codigo, pero me he quedado con esta duda como consultar nodos de nodos o no se como ser mas explicito, me gustaria recorrer todo este en un while.

    1. No necesitas de un while, porque cada elemento o lista de elementos se obtiene de forma explícita. En caso de tener más de un nodo del mismo tipo usas getElementsByTagName. Si desconoces el formato que tiene el XML quizá necesitas de un enfoque diferente para navegar tu XML, usar SAX por ejemplo, pero su implementación es más compleja. Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *