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