Leer un archivo XML en Java por este método es relativamente sencillo pero costoso 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 LeerXml { 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("password").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, esperamos que este ejemplo de leer un archivo XML en Java te sea de utilidad.
Update: Una forma más eficiente pero más difícil de implementar es esta que te mostramos en esta entrada:
https://decodigo.com/java-leer-xml-con-sax-parser
Más información en inglés: https://geekole.com/read-xml-files-in-java/
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.
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.