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:
¿Alguna idea de cómo podría hacerlo?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(); } }
Muchas gracias por vuestra ayuda.
Un saludo,
Paloma