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.

  • Frontera de elementos de listview en android
  • ((Botón)) dentro de un servicio no funciona
  • Cómo cargar el archivo xml del animador en Android programatically?
  • String-array dentro de string-array
  • Cómo clasificar los componentes de Android según el tamaño de la imagen mediante XML
  • Android Diseño de materiales Navegación Vista -> Elemento
  • Símbolo de porcentaje de Android XML
  • AutoCompleteTextView con lista personalizada: cómo configurar OnItemClickListener
  • FrameLayout no se puede convertir en android.widget.AbsListView
  • Barra de herramientas y Fragmento
  • Cómo solucionar el error: No se pudo encontrar el método onClick (View) en un padre o ancestro Contexto para android: onClick
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.