Foros del Web » Programación para mayores de 30 ;) » Java »

Leer un XML en Java

Estas en el tema de Leer un XML en Java en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/07/2009, 02:46
 
Fecha de Ingreso: julio-2008
Mensajes: 47
Antigüedad: 15 años, 9 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
  #2 (permalink)  
Antiguo 29/10/2010, 01:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Leer un XML en Java

Hola Paloma a buena hora he encontrado tu extracto de código, estoy trabajando en un buscador y queria consultarte si sabes como Leer XML, JSON desde un origen de datos de una web en vez de un archivo.

Elio Rivas, Ciudad Real España
----------------------
Cita:
Iniciado por palomarp Ver Mensaje
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:58.