Estoy usando SimpleXml en Android para deserializar un xml del que no tengo control. Ahora, cada vez que cambia el xml, frenará mi aplicación porque no tengo el nuevo elemento definido en mi clase de objeto. ¿Hay alguna manera de especificar SimpleXML solo para ignorar esos mapas erróneos? Miré la documentación y no puedo encontrar nada que me ayude a resolverlo.usando SimpleXML, cómo ignorar los elementos xml que no tengo en mi clase de objeto al deserializar
usando SimpleXML, cómo ignorar los elementos xml que no tengo en mi clase de objeto al deserializar
Respuesta
Estoy bastante seguro de que puede sortear el mapeo estricto reemplazando su declaración @Root
con @Root(strict=false)
, que eliminará el requisito de que cada elemento debe coincidir con un campo en su definición de clase. Más precisamente, de la documentación:
Esto se utiliza para determinar si el objeto representado debe ser analizado de manera estricta. El análisis estricto requiere que cada elemento y el atributo en el documento XML coincida con un campo en el esquema de clase. Si un elemento o atributo no coincide con un campo, el análisis falla con una excepción. Establecer el análisis estricto como falso permite detalles dentro del documento XML de origen que se omiten durante la deserialización .
También hay an example en la lista de tutoriales en el sitio del proyecto Simple XML.
Puede especificar que se deshabilite el modo estricto para todas las etiquetas para un read
en particular agregando "falso" como último parámetro. También de their documentation:
En caso de que exista más de un objeto que requiera mapeo libre, la utilización de la anotación Root podría no ser la solución ideal. En tal escenario, se le puede pedir al propio servidor que realice un mapeo libre. Simplemente pase un booleano al método de lectura que indica el tipo de mapeo requerido. De manera predeterminada, la persistencia utiliza una asignación estricta, que se puede anular en base a un objeto por objeto usando la anotación raíz, como se muestra en el ejemplo anterior. Sin embargo, este valor predeterminado se puede anular como se puede ver en el fragmento de código a continuación.
Contact contact = serializer.read(Contact.class, source, false);
- 1. ¿Cómo serializar/deserializar un objeto SimpleXML?
- 2. C# Deserializar XML al objeto
- 3. Error al deserializar Xml al objeto - xmlns = '' no se esperaba
- 4. Deserializar Xml con elementos vacíos en C#
- 5. ¿Cómo ignorar los elementos XML no utilizados mientras se deserializa un documento?
- 6. Cargando XML con SimpleXML no devuelve atributos en algunos elementos
- 7. ¿Cómo deserializar xml usando Linq?
- 8. Cómo deserializar xml de oponerse
- 9. FileNotFoundException al deserializar XML
- 10. Deserializar XML al objeto (necesita devolver una lista de objetos)
- 11. deserializar JSON al objeto JavaScript
- 12. Etiqueta de declaración XML usando SimpleXML
- 13. Deserializar la presencia de elementos XML para bool en C#
- 14. Errores intermitentes al deserializar el objeto desde XML
- 15. Root Element Falta al deserializar una respuesta XML usando XmlSerializer
- 16. editar XML con simpleXML
- 17. Ignorar el orden de los elementos usando xs: extensión
- 18. Xml simple - orden de los elementos no conservados?
- 19. Cómo recorro un objeto SimpleXML en PHP
- 20. Cómo deserializar un JObject al objeto .NET
- 21. Ignorando la codificación especificada al deserializar XML
- 22. Excepción al intentar deserializar un archivo XML
- 23. XML deserializar DateTime formato
- 24. Deserializar cadena de consulta al objeto JSON
- 25. Ignorar el orden de los elementos al validar XML contra XSD
- 26. DataContractSerializer no deserializar correctamente, los valores para los métodos de objeto faltan
- 27. ¿Cómo deserializo XML en un objeto usando un constructor que toma un XDocument?
- 28. Agregue child to xml con PHP simpleXml
- 29. En C# cómo puedo deserializar un documento XML que contiene una lista de elementos sin un elemento de lista circundante
- 30. Desasignación de XML al objeto existente usando JAXB
MH, de la información que me diste, yo terminó estableciendo el Parm 'mapeo floja' al hacer la lectura: serializer.read (Class1.class, fuente, false). Gracias por la ayuda. – Alex