JDOM

JDOM es un paquete java para trabajar con XML. La API es tan fea como cualquier otra de java. Y… si quieres saber mas te vas a su página que esto es un recordatorio de como trabajar con el.

Tampoco te voy a explicar que es el XML porque si estás aqui es que ya sabes de que va.

Vamos a ver que se puede hacer con el.

Usaré para estas pruebas el siguiente XML

<?xml version="1.0" encoding="UTF-8" ?>
<documento>
	<ejemplo>
		<contenido>Primera liena del ejemplo 1</contenido>
		<contenido>Segunda liena del ejemplo 1</contenido>
		<contenido>Tercera liena del ejemplo 1</contenido>
	</ejemplo>
	<ejemplo>
		<contenido>Primera liena del ejemplo 2</contenido>
		<contenido>Segunda liena del ejemplo 2</contenido>
		<contenido>Tercera liena del ejemplo 2</contenido>
	</ejemplo>
</documento>

Pues… ahora que tenemos esto vamos a ver como leer un archivo XML con JDOM:

import java.io.FileWriter;
import java.io.IOException;

import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class Lector1 {

	public static void main(String[] args) {
		// comprobaremos que recibo un archivo xml para parsear 
		String archivo = null;
		if (args.length != 1) {
			System.out.println("Uso: Lector1  + paht/del/xml.xml");
			return;
		} else {
			archivo = args[0];
		}
		// lo primero es construir el documento
		// Create an instance of the tester and test
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build(archivo);

			// para simplemente escupir el contenido, por pantalla 
			XMLOutputter outputter = new XMLOutputter();
			//outputter.setExpandEmptyElements(true);
			outputter.output(doc, System.out);

			// para escribir tu xml en un archivo de texto:
			FileWriter writer = new FileWriter("/tmp/salida.xml");
			outputter.output(doc, writer);
			writer.close();

		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Veamos como acceder al contenido del XML

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class Lector1 {
	static void p(String s) {
		// Método para imprimir rápido y comodamente...
		System.out.println(s);
	}

	public static void main(String[] args) {
		// comprobaremos que recibo un archivo xml para parsear
		String archivo = null;
		String texto = null;
		if (args.length != 1) {
			System.out.println("Uso: Lector1  + paht/del/xml.xml");
			return;
		} else {
			archivo = args[0];
		}
		// lo primero es construir el documento
		// Create an instance of the tester and test
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build(archivo);
			// Todo, al fin y al cabo es un elemento
			Element e = doc.getRootElement();
			texto = e.getName();
			p("La raiz del documento es : " + texto);
			// Y los elementos tienen hijos, padres y familia
			// que se puede listar
			List<Element> elementos = e.getChildren();
			// una lista se recorre con un iterador
			Iterator i = elementos.iterator();
			while (i.hasNext()) {
				// el tierador devuelve un objeto por lo que hay que volver a
				// convertirlo en elemento
				Element e2 = (Element) i.next();
				// para ver lo que tiene:
				texto = e2.getName();
				p("El nombre del elemento es : " + texto);

				// y ese elemento tiene una serie de hijos EN NUESTRO EJEMPLO
				List<Element> listado = e2.getChildren("contenido");
				Iterator<Element> i2 = listado.iterator();
				while (i2.hasNext()) {
					Element contenido = (Element) i2.next();
					texto = contenido.getName();
					p("El nombre del elemento es : " + texto);
					texto = contenido.getText();
					p("El texto que contiene el elemento es: " + texto);
				}

			}

		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Con lo que obtendríamos una salida de este tipo:

La raiz del documento es : documento
El nombre del elemento es : ejemplo
El nombre del elemento es : contenido
El texto que contiene el elemento es: Primera liena del ejemplo 1
El nombre del elemento es : contenido
El texto que contiene el elemento es: Segunda liena del ejemplo 1
El nombre del elemento es : contenido
El texto que contiene el elemento es: Tercera liena del ejemplo 1
El nombre del elemento es : ejemplo
El nombre del elemento es : contenido
El texto que contiene el elemento es: Primera liena del ejemplo 2
El nombre del elemento es : contenido
El texto que contiene el elemento es: Segunda liena del ejemplo 2
El nombre del elemento es : contenido
El texto que contiene el elemento es: Tercera liena del ejemplo 2
 
jxml/jdom1.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki