2012-06-15 28 views
6

我有下面的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

好,請出示您的XML,也許源代碼,你在哪裏設置的XStream –

回答

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