Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 01munrra en 22 Enero 2012, 13:00 pm



Título: Trabajar con archivos xml en java!!!!
Publicado por: 01munrra en 22 Enero 2012, 13:00 pm
saludos!!
 
les comento, tengo este xml:

taller.xml
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taller>
  3.  
  4. <costurero value = "1111">
  5. <id> 1111 </id>
  6. </costurero>
  7.  
  8. <costurero value = "2222">
  9. <id> 2222 </id>
  10. </costurero>
  11.  
  12. <costurero value = "3333">
  13. <id> 3333 </id>
  14. </costurero>
  15.  
  16. </taller>
  17.  

costurero.xml
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <costurero>
  3.  
  4. <costurero value = "1111">
  5. <id> 1111 </id>
  6. <nombre> german </nombre>
  7. <apellido> perez </apellido>
  8. </costurero>
  9.  
  10. <costurero value = "2222">
  11. <id> 2222 </id>
  12. <nombre> alberto </nombre>
  13. <apellido> flores </apellido>
  14. </costurero>
  15.  
  16. <costurero value = "3333">
  17. <id> 3333 </id>
  18. <nombre> maria </nombre>
  19. <apellido> perez </apellido>
  20. </costurero>
  21.  
  22. </costurero>
  23.  

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
  1. public class principal
  2. {
  3.  public static void main(String[] args)
  4.  {
  5. File ArchivoT = new File("src/taller.xml");
  6. SAXBuilder parser1 = new SAXBuilder();
  7.  
  8. File ArchivoC = new File("src/costurero.xml");
  9. SAXBuilder parser2 = new SAXBuilder();
  10.  
  11. try
  12. {  
  13.      Document docT = parser1.build(ArchivoT);
  14.      Element elementoRaizT = docT.getRootElement();
  15.  
  16.      Document docC = parser2.build(ArchivoC);
  17.      Element elementoRaizC = docC.getRootElement();
  18.  
  19.      List arregloT = elementoRaizT.getChildren();
  20.      List arregloC = elementoRaizC.getChildren();
  21.  
  22.      for(int i=0; i<arregloT.size(); i++)
  23.      {
  24.     Element RegistroT = (Element)arregloT.get(i);
  25.        Element id = elementoRaizC.getAttributes();  
  26.  
  27.     for(int j=0; j<arregloC.size(); j++)
  28.     {
  29.     Element RegistroC = (Element)arregloC.get(j);
  30.  
  31.     System.out.println(RegistroT.getAttributeValue("value"));
  32.  
  33.     }
  34.      }
  35. }
  36.  catch (Exception e)
  37.  {
  38.    e.printStackTrace();
  39.  }
  40.  
  41.  }
  42. }
  43.  

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

Código
  1.        Element id = elementoRaizC.getAttributes();      
  2.  
}

me pueden ayudar please!!!


Título: Re: Trabajar con archivos xml en java!!!!
Publicado por: Littlehorse en 22 Enero 2012, 20:33 pm
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
  1. <id> id </id>
  2.  

 Esto es un elemento con atributo name con valor "something"
 
Código
  1. <id name="something > id </id>
  2.  

 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
  1. //Asumo que nada es null para hacer el codigo mas sencillo
  2. Iterator itr = (elementoRaizT.getChildren()).iterator(); //Lista con 3 elementos costurero
  3. while(itr.hasNext()) {
  4. Element elementoActual = (Element)itr.next(); //elemento costurero.
  5. Element id = elementoActual.getChild("id"); //elemento hijo id de costurero.
  6. System.out.println(id.getText()); //getText retorna el texto dentro del elemento.
  7. //process
  8. }

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

Saludos!
 
 


Título: Re: Trabajar con archivos xml en java!!!!
Publicado por: 01munrra en 22 Enero 2012, 23:59 pm
hola! Littlehorse ,,, tenia el xml de taller malo,,,, es de esta forma:

taller.xml
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taller>
  3.  
  4.    <empresa> Confeciones Don Marco </empresa>
  5.    <direccion> El Este </direccion>
  6.    <costurero> 1111 </costurero>
  7.    <costurero> 2222 </costurero>
  8.    <costurero> 3333 </costurero>
  9.  
  10. </taller>
  11.  

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 ???


Título: Re: Trabajar con archivos xml en java!!!!
Publicado por: Littlehorse en 23 Enero 2012, 00:21 am
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!


Título: Re: Trabajar con archivos xml en java!!!!
Publicado por: 01munrra en 23 Enero 2012, 00:27 am
cuando dices:

(y usar trim)

a que te refieres???

saludos!.......



Título: Re: Trabajar con archivos xml en java!!!!
Publicado por: Littlehorse en 23 Enero 2012, 00:37 am
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!