Trabajar con archivos xml en java!!!!

Iniciado por 01munrra, 22 Enero 2012, 13:00 PM

0 Miembros y 1 Visitante están viendo este tema.

01munrra

saludos!!

les comento, tengo este xml:

taller.xml
Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<taller>

<costurero value = "1111">
<id> 1111 </id>
</costurero>

<costurero value = "2222">
<id> 2222 </id>
</costurero>

<costurero value = "3333">
<id> 3333 </id>
</costurero>

</taller>


costurero.xml
Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<costurero>

<costurero value = "1111">
<id> 1111 </id>
<nombre> german </nombre>
<apellido> perez </apellido>
</costurero>

<costurero value = "2222">
<id> 2222 </id>
<nombre> alberto </nombre>
<apellido> flores </apellido>
</costurero>

<costurero value = "3333">
<id> 3333 </id>
<nombre> maria </nombre>
<apellido> perez </apellido>
</costurero>

</costurero>


como podran ver estos 2 archivos se relacionan por medio de un id, entonces lo que estoy tratando de hacer es que tome el id de taller y lo busque en costurero.xml y si ha de existir lo guardo en la base de datos, he hecho esto:

Código (java) [Seleccionar]

public class principal
{
  public static void main(String[] args)
  {
File ArchivoT = new File("src/taller.xml");
SAXBuilder parser1 = new SAXBuilder();

File ArchivoC = new File("src/costurero.xml");
SAXBuilder parser2 = new SAXBuilder();

try
{  
      Document docT = parser1.build(ArchivoT);
      Element elementoRaizT = docT.getRootElement();
     
      Document docC = parser2.build(ArchivoC);
      Element elementoRaizC = docC.getRootElement();
     
      List arregloT = elementoRaizT.getChildren();
      List arregloC = elementoRaizC.getChildren();
     
      for(int i=0; i<arregloT.size(); i++)
      {
    Element RegistroT = (Element)arregloT.get(i);
        Element id = elementoRaizC.getAttributes(); 
   
    for(int j=0; j<arregloC.size(); j++)
    {
    Element RegistroC = (Element)arregloC.get(j);
         
    System.out.println(RegistroT.getAttributeValue("value"));
   
    }
      }
}
  catch (Exception e)
  {
    e.printStackTrace();
  }

  }
}


estoy usando jdom pero me da error al tratar de guardar el id de taller en una variable..... en esta:

Código (java) [Seleccionar]

        Element id = elementoRaizC.getAttributes();     
}

me pueden ayudar please!!!

Littlehorse

El primer error que se ve a la vista es que estas haciendo un getAttributes la cual retorna una lista de atributos y quieres asignarla a un elemento.

Esto es un elemento:

Código (xml) [Seleccionar]
<id> id </id>


Esto es un elemento con atributo name con valor "something"
Código (xml) [Seleccionar]
<id name="something > id </id>


Aclarado esto, el segundo error que me parece ver es que estas obteniendo los elementos de manera correcta pero no estas accediendo a los ids correctamente.
Un getChildren te trae los elementos elementos costurero pero luego por cada elemento costurero debes obtener el child ID. Es decir, por cada nivel de profundidad de elementos es necesario hacer un getChild[ren].

Algo así:
Código (java) [Seleccionar]

//Asumo que nada es null para hacer el codigo mas sencillo
Iterator itr = (elementoRaizT.getChildren()).iterator(); //Lista con 3 elementos costurero
while(itr.hasNext()) {
Element elementoActual = (Element)itr.next(); //elemento costurero.
Element id = elementoActual.getChild("id"); //elemento hijo id de costurero.
System.out.println(id.getText()); //getText retorna el texto dentro del elemento.
//process
}


Cualquier corrección es bienvenida porque hace mucho que no toco JDOM, pero en teoría esto te tendría que funcionar.

Saludos!

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

01munrra

hola! Littlehorse ,,, tenia el xml de taller malo,,,, es de esta forma:

taller.xml
Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<taller>

    <empresa> Confeciones Don Marco </empresa>
    <direccion> El Este </direccion>
    <costurero> 1111 </costurero>
    <costurero> 2222 </costurero>
    <costurero> 3333 </costurero>

</taller>


es la primera ves que estoy programando en java y pues en realidad me esta costando hacer el codigo de manera correcta, y pues lo que quiero hacer es me tome el dato de la etiqueta <costurero> y lo busque en el id de costurero, de forma que al existir lo guardo en mi base de datos postgreSQL, y te pregunto hay alguna forma de hacer esto aqui en este lenguaje ???

Littlehorse

La idea seria algo así:

taller.xml
1) getRootElement() // seria el elemento taller
2) getChildren("costurero") // Lista con los 3 costureros

costurero.xml
1) getRootElement //Seria el elemento costurero
2) getChildren("costurero") // Lista con los 3 costureros
3) Por cada elemento, getChild("id") // id del elemento costurero

Y luego solo tienes que comparar. getText para obtener el contenido de cada elemento (y usar trim).

Si tienes dudas me avisas pero intenta plasmar esto en el código teniendo en mente la estructura de niveles de los elementos.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

01munrra


Littlehorse

Hay métodos de Element como getTextTrim() que retornan el contenido del elemento sin espacios, pero muchos usan el método trim de la clase String aparte. Es cuestión de gustos pero esta bien usar lo que sea que quite los espacios cuando estos no son relevantes al comparar cadenas, de lo contrario puedes obtener resultados indeseados.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.