2012-06-15 16 views
6

tengo el siguiente código XML:Java xstream - ¿Cómo hacer caso omiso de algunos elementos

<xml version="1.0" encoding="UTF-8"?> 
<osm version="0.6" generator="CGImap 0.0.2"> 
<bounds minlat="48.1400000" minlon="11.5400000" maxlat="48.1450000" maxlon="11.5430000"/> 
<node id="398692" lat="48.1452196" lon="11.5414971" user="Peter14" uid="13832" visible="true" version="18" changeset="10762013" timestamp="2012-02-22T18:59:41Z"> 
</node> 
<node id="1956100" lat="48.1434822" lon="11.5487963" user="Peter14" uid="13832" visible="true" version="41" changeset="10762013" timestamp="2012-02-22T18:59:39Z"> 
    <tag k="crossing" v="traffic_signals"/> 
    <tag k="highway" v="traffic_signals"/> 
    <tag k="TMC:cid_58:tabcd_1:Class" v="Point"/> 
    <tag k="TMC:cid_58:tabcd_1:Direction" v="positive"/> 
    <tag k="TMC:cid_58:tabcd_1:LCLversion" v="9.00"/> 
    <tag k="TMC:cid_58:tabcd_1:LocationCode" v="35356"/> 
    <tag k="TMC:cid_58:tabcd_1:NextLocationCode" v="35357"/> 
    <tag k="TMC:cid_58:tabcd_1:PrevLocationCode" v="35355"/> 
</node> 
</osm> 

sólo quiero un mapa de los elementos (nodos) a un objeto, pero estoy teniendo problemas:

  1. Se queja de elementos de límites, porque no quiero asignarlos.
  2. No todos nodes tienen tags así que estoy teniendo algunos problemas con él.
+0

Bien, muestre su xml y quizás el código fuente donde está configurando xstream –

Respuesta

7

comportamiento Mapper Desafortunadamente superior mencionado aquí no funciona con colecciones implícitas o anotaciones. Lo comprobé con la versión 1.4.3. Así que la solución obvia que encontré fue burlar los campos ignorados con la omisión de la anotación. Funciona perfecto para mí, pero un poco aburrido para crearlos todo el tiempo.

@XStreamOmitField 
private Object ignoredElement; 
+2

O, como alternativa, también puede hacer: 'xStream.omitField (ClassName.class," fieldName ");' – iamharish15

4

Desde xstream 1.4.5 durring declaración marshaller Es suficiente para utilizar ignoreEnknownElements() Método:

XStreamMarshaller marshaller = new XStreamMarshaller(); 
marshaller.getXStream().ignoreUnknownElements(); 
... 

para ignorar los elementos innecesarios.

1

Simplemente defina la clase anónima siguiente después de la deceleración de Xtream.

XStream xstream = new XStream(new DomDriver()){ 
      protected MapperWrapper wrapMapper(MapperWrapper next) { 
       return new MapperWrapper(next) { 
        public boolean shouldSerializeMember(Class definedIn, String fieldName) { 
         try { 
          return definedIn != Object.class || realClass(fieldName) != null; 
         } catch(CannotResolveClassException cnrce) { 
          return false; 
         } 
        } 
       }; 
      } 
     }; 
Cuestiones relacionadas