2012-06-15 13 views
6

Mam następujące XML:Java XStream - Jak ignorować pewne elementy

<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> 

Chcę tylko odwzorować elementy (węzła) do obiektu, ale mam problemy:

  1. Narzeka na elementy obwiedni, ponieważ nie chcę ich mapować.
  2. Nie wszystkie nodes mają nodes mają tags, więc mam pewne problemy z nim.
+0

Cóż, proszę pokazać swój xml i może kod źródłowy, na którym konfigurujesz xstream –

Odpowiedz

7

Niestety nadrzędnym zachowanie Mapper wspomniano tutaj nie działa z ukrytych zbiorów lub adnotacji. Sprawdziłem w wersji 1.4.3. Więc oczywistym rozwiązaniem, które znalazłem, było kpiny z ignorowanych pól z pominięciem adnotacji. Działa idealnie dla mnie, ale trochę nudne, by je tworzyć za każdym razem.

@XStreamOmitField 
private Object ignoredElement; 
+2

Lub, alternatywnie, możesz również: 'xStream.omitField (ClassName.class," fieldName ");' – iamharish15

4

Od XStream 1.4.5 durring deklaracji naziemnego to wystarczy użyć ignoreEnknownElements() metoda:

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

zignorować zbędne elementy.

1

Po prostu określ poniżej anonimową klasę po zwalnianiu 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; 
         } 
        } 
       }; 
      } 
     };