• Viernes 8 de Noviembre de 2024, 15:52

Autor Tema:  Serializacion XML  (Leído 2458 veces)

dayler

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Serializacion XML
« en: Lunes 16 de Marzo de 2009, 16:29 »
0
Hola .. . . primero pedirles paciencia . .  para ver mi problema . . . y gracias de antemano . por el interés. . .

para serializar un objeto a xml hago lo siguiente:

Código: Java
  1.  
  2.     public static void serializar(Object o, String fileName) throws FileNotFoundException, IOException{
  3.  
  4.         String out;
  5.         FilesManager file = new FilesManager();
  6.         file.setPath(fileName);
  7.         //serializar xml
  8.         //BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("periquito.xml"));
  9.         XMLEncoder xmlEncoder = new XMLEncoder(bout);
  10.         xmlEncoder.writeObject(o);
  11.         xmlEncoder.close();
  12.         out = bout.toString();
  13.  
  14.         file.setPath(fileName);
  15.         file.openFile();
  16.         file.write(out);
  17.         file.closeFile();
  18.  
  19.     }
  20.  
  21.  

Al serializar por ejemplo una clase Persona qeu es como sigue:
Código: Java
  1.  
  2. public class Persona {
  3.  
  4.     private String name;
  5.     private String apellido;
  6.     private int edad;
  7.  
  8.     public Persona(){}
  9.  
  10.     public Persona(String name, String apellido, int edad){
  11.         this.name = name;
  12.         this.apellido = apellido;
  13.         this.edad = edad;
  14.     }
  15.  
  16.     public void MostrarPersona(){
  17.         String mesage = "Nombre: " + name + " Apellido: " + " Edad: " + edad;
  18.  
  19.         System.out.println(mesage);
  20.     }
  21.  
  22.     public void setName(String name){
  23.         this.name = name;
  24.     }
  25.  
  26.     public String getName(){
  27.         return name;
  28.     }
  29.  
  30.     public void setApellido(String apellido){
  31.         this.apellido = apellido;
  32.     }
  33.  
  34.     public String getApellido(){
  35.         return apellido;
  36.     }
  37.  
  38.     public void setEdad(int edad){
  39.         this.edad = edad;
  40.     }
  41.  
  42.     public int getEdad(){
  43.         return edad;
  44.     }
  45. }
  46.  
  47.  

me da el siguiente resultado . .
Código: XML
  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <java version="1.6.0_10-rc2" class="java.beans.XMLDecoder">
  4.  <object class="testserializerxml.Persona">
  5.   <void property="apellido">
  6.    <string>hinojosa</string>
  7.   </void>
  8.   <void property="edad">
  9.    <int>23</int>
  10.   </void>
  11.   <void property="name">
  12.    <string>leyla</string>
  13.   </void>
  14.  </object>
  15. </java>
  16.  
  17.  

Cosa que esta bastante bien . . . pero si observan verán que el orden de las propiedades ha sido cambiado tras la serializacion, yo requiero que esto no pase, ahora no se si alguno de ustedes podría decirme como es que hago para que XMLEncoder me serialize las propiedades tal cual aparecen, y no intente ordenar las alfabéticamente,  si es que esto es poble claro.

Saludos . . .

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Serializacion XML
« Respuesta #1 en: Martes 17 de Marzo de 2009, 17:46 »
0
Hola.

Para el XML es absolutamente indiferente que los tags del mismo nombre y a la misma profundidad vengan en un orden o en otro.

Si miras la documentación de Document verás que cuando preguntas por un hijo, o un conjunto de ellos, en la propia documentación de Java te dice que esos métodos no garantizan que los hijos sean devueltos en orden.

De todas formas ¿cuál es la diferencia entre las dos clases que propones? Funcionalmente no hay ninguna ¿por qué necesitas que se conserve el orden de los atributos?



Un saludo.



Silverfox

dayler

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Serializacion XML
« Respuesta #2 en: Miércoles 18 de Marzo de 2009, 00:24 »
0
Hola . .  .

Inicialmente agradecerte por tu respuesta . . . . la verdad ni yo estoy muy seguro, segun me entere hera para facilitarse la vida con un xslt, qeu se estaba desarrollando . . . me lo enviaron como requerimiento, pero al parecer ya solucionaron el problema. . .  :bad:

Saludos . . .