2012-06-15 11 views
6

I次のXMLを持っている:のJava XStreamの - いくつかの要素を無視する方法

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

私はオブジェクトへの要素(ノード)をマップしたいが、私は問題を抱えている:

  1. 私はそれらをマップしたくないので、境界要素について不平を言います。
  2. すべてnodesにはtagsがありますので、いくつか問題があります。
+0

xstreamを設定しているxmlとおそらくソースコードを表示してください。 –

答えて

7

残念ながらここで言及オーバーライドマッパーの動作が暗黙のコレクションや注釈では動作しません。私はバージョン1.4.3でチェックしました。 私が見つけた明らかな解決策は、無視された注釈で無視されたフィールドを模擬することでした。私のためには完璧に動作しますが、毎回作成するのにちょっと退屈です。

@XStreamOmitField 
private Object ignoredElement; 
+2

あるいは、次のようにすることもできます: 'xStream.omitField(ClassName.class、" fieldName ");' – iamharish15

4

はXStreamの1.4.5 durringのマーシャラー宣言するので、それはignoreEnknownElementsを使用するのに十分だ()メソッド:

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

不要な要素を無視します。

1

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; 
         } 
        } 
       }; 
      } 
     }; 
関連する問題