Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/07/2009, 02:46
palomarp
 
Fecha de Ingreso: julio-2008
Mensajes: 47
Antigüedad: 16 años, 5 meses
Puntos: 0
Leer un XML en Java

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