Hola,
tengo un programa en Java que lee un XML y extrae ciertos datos que necesitaré después para otras cosillas. El problema es que necesito que sean dos los documentos XML que se lean y no sé como ampliarlo. El código básico que empleo es parecido al de este ejemplo:
Código:
public class ProcesarXML {
private Document dom;
private List listadoDescargas;
//Constructor
public ProcesarXML() {
listadoDescargas = new ArrayList();
// A. Parsear el archivo XML
parsearArchivoXml();
// B. Obtener datos del documento XML
parsearDocumento();
// C. Imprimir los resultados
imprimirResultados();
}
//Parsea el archivo XML
public void parsearArchivoXml() {
// 1. Obtener el objeto DocumentBuilderFactory, con el que se creará el documento XML
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// 2. Usar DocumentBuilderFactory para crear un DocumentBuilder
DocumentBuilder db = dbf.newDocumentBuilder();
// 3. Parsear a partir de un archivo
dom = db.parse("descargas.xml");
} catch (ParserConfigurationException pce) { //Capturamos los errores, si los hubiera
pce.printStackTrace();
} catch (SAXException se) {
se.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
//Parsea el documento XML y extrae los datos:
//extrae los datos del documento XML y los almacena en beans de la clase Descargas
public void parsearDocumento() {
// 1. Obtener el documento raiz
//Se crea un objeto Element, a partir del documento XML
Element docEle = dom.getDocumentElement();
// 2. Obtener un nodelist de elementos <descarga>
NodeList nl = docEle.getElementsByTagName("descarga");
if (nl != null && nl.getLength() > 0) {
for (int i = 0; i < nl.getLength(); i++) {
// a. Obtener el elemento que el nodo actual represente
Element elemento = (Element) nl.item(i);
// b. Obtener el objeto empleado
Descargas descarga = obtenerDescarga(elemento);
// c. Aniadirlo a la lista
listadoDescargas.add(descarga);
}
}
}
//Imprimir los datos
public void imprimirResultados() {
Iterator it = listadoDescargas.iterator();
while (it.hasNext())
System.out.println(it.next().toString());
}
//Devuelve un objeto Descarga generado con los datos de un elemento XML
public Descargas obtenerDescarga(Element elemento) {
int id = Integer.parseInt(elemento.getAttribute("id"));
String titulo = obtenerTexto(elemento, "titulo");
String ruta = obtenerTexto(elemento, "ruta");
int hits = obtenerEntero(elemento, "hits");
// Crear un objeto Descargas con los datos recibidos
Descargas d = new Descargas(id, titulo, ruta, hits);
return d;
}
//Devuelve un valor entero del elemento recibido
private int obtenerEntero(Element elemento, String nombreEtiqueta) {
return Integer.parseInt(obtenerTexto(elemento, nombreEtiqueta));
}
//Devuelve los datos del elemento recibido
private String obtenerTexto(Element elemento, String nombreEtiqueta) {
String texto = null;
NodeList nl = elemento.getElementsByTagName(nombreEtiqueta);
if (nl != null && nl.getLength() > 0) {
Element el = (Element) nl.item(0);
texto = el.getFirstChild().getNodeValue();
}
return texto;
}
public static void main(String args[]) {
ProcesarXML procesador = new ProcesarXML();
}
}
¿Alguna idea de cómo podría hacerlo?
Muchas gracias por vuestra ayuda.
Un saludo,
Paloma