Java XStream-как игнорировать некоторые элементы
у меня есть следующий XML-код:
<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>
Я просто хочу сопоставить элементы (узел) с объектом, но у меня возникают проблемы:
- он жалуется на элементы границ, потому что я не хочу их сопоставлять.
- не все
nodes
естьtags
поэтому у меня возникают некоторые проблемы с этим.
4 ответов
к сожалению, переопределение поведения Mapper, упомянутое здесь, не работает с неявными коллекциями или аннотациями. Я проверил версию 1.4.3. Поэтому очевидным решением, которое я нашел, было издеваться над игнорируемыми полями с аннотацией ommiting. Работает идеально подходит для меня, но немного скучно создавать их каждый раз.
@XStreamOmitField
private Object ignoredElement;
поскольку объявление xStream 1.4.5 durring marshaller достаточно использовать метод ignoreEnknownElements ():
XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.getXStream().ignoreUnknownElements();
...
игнорировать ненужные элементы.
просто определите ниже анонимный класс после замедления 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;
}
}
};
}
};
простой гуглить показывает много ioptions. Вот одна из них:--1-->
http://rafaelsteil.com/omit-unexpected-xml-elements-with-xstream/