miércoles, 4 de septiembre de 2013

Leer un xml con Java

El siguiente post explica como usar la librería JDOM que permite trabajar los XML con java. Podemos acceder a la API y su documentación en la pagina oficial. A su vez pueden descargar el código de ejemplo que utilizo desde GitHub. 

Hay que tener en cuenta 2 cosas:
1- Es necesario bajar la API de JDOM
2- Conocer la estructura con la que se va a trabajar.

El siguiente método forma parte del código que se encuentra en GitHub y explica modestamente como se utiliza la API JDOM.

public void LeerPrimerNivel() {

 
  // Se crea un SAXBuilder para poder parsear el archivo
  builder = new SAXBuilder();
  xmlFile = new File(path.leerPath());

  try {
   //Se parcea el archivo xml para crear el documento 
   //que se va a tratar.
   documento = (Document) builder.build(xmlFile);

   // Se obtiene la raiz del documento. En este caso 'cruisecontrol'
   rootNode = documento.getRootElement();
   
   // Obtengo el tag "info" como nodo raiz para poder trabajar 
   // los tags de éste.
   rootNode_Level2 = rootNode.getChild("info");
   
   // Obtengo los nodos "property" del tag info y los almaceno en
   // una lista.
   lista = rootNode_Level2.getChildren("property");
   
   //Imprimo por consola la lista.
   for (int i = 0; i < lista.size(); i++){
    System.out.println(((Element)lista.get(i)).getAttributeValue("value"));
   }
  
  } catch (IOException io) {
   System.out.println(io.getMessage());
  } 
  catch (JDOMException jdomex) {
   System.out.println(jdomex.getMessage());
  }
 } 

Como resultado, obtenemos la siguiente salida por consola

FormulasMatematicas
20130430111319
2013-04-30T16:48:55
20130430134855
build.2
300
true
/opt/cruisecontrol-bin-2.8.4/logs/FormulasMatematicas
log20130430134855.xml
20130430111319
El método build() parsea y construye el documento que va a tratar el programa a traves de la API JDOM.
documento = (Document) builder.build(xmlFile);
Se crea un element que va a contener el Nodo Raíz del XML que se esta parseando. El método  getRootElement() va a retornar el elemento raíz del documento XML.
rootNode = documento.getRootElement();
El método get.Child() devuelve un Nodo hijo del XML/ el Nodo del segundo nivel del elemento que se ha definido como Nodo Raíz.
rootNode_Level2 = rootNode.getChild("STRING");
El método getChildren() nos retorna una lista con el nombre de los elementos encerrados en los tags. 
lista = rootNode_Level2.getChildren("property");
Por último el método getAttributeValue() nos va a retornar el valor que poseen los elementos que nos devuelve el método getChildren().
getAttributeValue("value")