@Namespace en Android SimpleXml

Tengo este archivo XML:

<Name xml:lang="en">English</Name> <Name xml:lang="it">Italian</Name> 

Y mi clase:

 @Element @Namespace(reference = "en", prefix = "lang") public class Name { @Text private String title; @Override public String toString() { return title.toUpperCase() + "\n"; } 

¿Por qué cuando hago toString, no imprime sólo el nombre en inglés?

Tnks

Hay algunas cosas mal en tu clase:

  1. Tienes que usar @Root para clases, no @Element
  2. Su @Namespace se establece para la clase, no el atributo
  3. Debido a que 2. no obtiene un atributo
  4. ¿Es correcta la referencia de su espacio de nombres?
  5. Su xml es una lista , no una sola clase

Si serializa su clase a xml, obtendrá algo como esto:

 <lang:name xmlns:lang="en">Example</lang:name> 

-> No coincide con su entrada.


He aquí una versión corregida:

 @Root(name = "Name") public class Name { @Text() private String text; @Attribute(name = "lang") @Namespace(prefix = "xml", reference = "") // Add your reference here! private String attr; @Override public String toString() { return text.toUpperCase() + "\n"; } } 

Esto serializa a:

 <name xml:lang="en" xmlns:xml="">English</name> 

Tenga en cuenta que todavía no hay ningún conjunto de referencia , pero puede ignorar su atributo.

Ahora obtendrás un solo Name en un objeto. Sin embargo, su xml contiene una lista de esos. Por lo tanto, necesita otra asignación de clases en esta lista:

 @Root(name = "Names") public class NameList { @ElementList(name = "Names", inline = true) private List<Name> names; } 

Para probar, puede serializar esto también:

 <Names> <Name xml:lang="en" xmlns:xml="">English</Name> <Name xml:lang="it" xmlns:xml="">Italian</Name> </Names> 

Observe por favor esas etiquetas alrededor.

Esto está muy cerca de su opinión; Recuerde: xmlns:xml – la referencia – puede ser ignorada. Así que simplemente corrija su xml. Asumiendo que usted tiene un elemento padre Names :

 <Names> <Name xml:lang=\"en\">English</Name> <Name xml:lang=\"it\">Italian</Name> </Names> 

Y la prueba final ahora:

 final String xml = "<Names>" + "<Name xml:lang=\"en\">English</Name>" + "<Name xml:lang=\"it\">Italian</Name>" + "</Names>"; Serializer ser = new Persister(); NameList names = ser.read(NameList.class, xml); System.out.println(names); 

Ambas entradas se deserializan correctamente en los names . Utilizando otro método toString() , obtengo esto:

 NameList{names=[Name{text=English, attr=en}, Name{text=Italian, attr=it}]} 
  • ¿Qué sucede si la minSdkVersion es menor que la targetSdkVersion?
  • ¿Cómo puedo crear un ListView con divisiones de línea punteadas / punteadas en Android?
  • No se especifica ninguna orientación y el valor predeterminado es horizontal. Esta es una fuente común de errores cuando los niños se añaden dinámicamente
  • Cómo cambiar la imagen de un botón con cada clic?
  • Rellene Spinner del origen de matriz de cadena, con un String ArrayAdapter
  • El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • El método más simple para convertir Json a Xml
  • Solución automática de laberinto
  • ¿Hay algún uso legítimo para @ + android: id?
  • Disposición de Android: vistas cuadráticas
  • ¿Puedo dibujar rectángulo en XML?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.