Simple Xml – orden de elementos no conservados?

Estoy usando SimpleXml 2.6.1 en mi aplicación android. Aunque la documentación (http://simple.sourceforge.net/download/stream/doc/javadoc/index.html?org/simpleframework/xml/Order.html) dice que el orden de los elementos en el xml son iguales a la forma Que han definido en el archivo de clase, siempre estoy recibiendo el orden de ser al azar en el xml. Si añado más variables, el orden de los elementos cambia de nuevo.

La adición de la notación de @Order funciona, pero como la clase es compleja con 100s de variables, no quiero añadir orden. ¿Es este un error conocido para las versiones de Android? Funciona bien en los programas de consola java.

Ps: Abrí el archivo .class desmontado y encontré las variables declaradas en el mismo orden que el archivo java, así que no creo que sea un problema de archivo de clase.

3 Solutions collect form web for “Simple Xml – orden de elementos no conservados?”

Como no hay respuesta, trataré de ahorrar un tiempo precioso a cualquiera que llegue aquí.

No encontré ninguna causa, y como no tengo tiempo para analizar las bibliotecas simples, me surgió un "workaroud". Es más de un consejo, en realidad – no lo utilizan para (marshaling) la creación de xml si tiene una gran definición xml y el orden (una regla más que una excepción). La orden se utiliza sobre todo para el marshaling de todos modos así que ahorrarse un poco de tiempo y hacerlo manualmente.

La plantilla:

<document> <name>$NAME$</name> <isTrue>$IS_TRUE$</isTrue> </document> 

La clase:

 import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; /** * User: ksaric */ public class SimpleXml { public static final String NAME = "$NAME$"; public static final String IS_TRUE = "$IS_TRUE$"; private String name; private Boolean isTrue; public SimpleXml() { } public Boolean getTrue() { return isTrue; } public void setTrue(Boolean aTrue) { isTrue = aTrue; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { String template = null; try { template = getTemplate(); } catch (IOException e) { e.printStackTrace(); } /* GUAVA - checkNotNull() */ if (null == template) return null; template = template.replace(NAME, getName()); /* OR CONVERT IN THE GETTER METHOD */ template = template.replace(IS_TRUE, getTrue().toString()); return template; } /* SINGLETON? Performance(IO) loss... */ public String getTemplate() throws IOException { InputStream templateStream = getClass().getResourceAsStream("/template.xml"); /* APACHE IO COMMONS */ /* <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> */ final String stringTemplate = IOUtils.toString(templateStream); return stringTemplate; } } 

La prueba:

 import org.junit.Test; import static junit.framework.Assert.*; /** * User: ksaric */ public class SimpleXmlTest { @Test public void test() throws Exception { //Before /* Use standard instantiation, factory method recommended for immutability */ SimpleXml simpleXml = new SimpleXml(); simpleXml.setName("This is a name"); simpleXml.setTrue(false); //When String result = simpleXml.toString(); //Then assertNotNull(result); System.out.println(result); } } 

Realmente no es una respuesta, pero ahorra tiempo y no utilices Simple (que es una gran biblioteca) en Android …

 import org.simpleframework.xml.Element; import org.simpleframework.xml.Order; @Order(elements = {"name", "isTrue"}) public class SimpleXml { public static final String NAME = "$NAME$"; public static final String IS_TRUE = "$IS_TRUE$"; @Element private String name; @Element private Boolean isTrue; ... 

Simple Xml no mantiene la orden en Android. Sobre la base de la respuesta de pfh, aquí está mi recomendación: Preferiría usar JAXB en el caso en el que desea que el orden de ser preservado de la cadena manual / parsing plantilla. JAXB es un poco complejo de usar que SimpleXml pero viene con un conjunto similar de anotaciones basadas en la serialización y deserialización de xml.

  • Cómo cambiar el nombre de la aplicación en NativeScript
  • Con SAX Parser, obtiene el valor de un atributo
  • String-array dentro de string-array
  • Rotar Marcador y Mover Animación en Mapa como Uber Android
  • Obtener atributos con estilo para el niño de la definición de estilo de los padres
  • Edittext obtiene automáticamente el foco cuando se mueve entre páginas en un paginador de vista
  • Mensaje de error XML de Android
  • Android: traducciones en recursos
  • Cambiar el tema de android de cordova config.xml
  • RadioGroup extendiendo RelativeLayout?
  • Esquinas redondeadas redondeadas de Android XML con etiqueta de mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.