2013-12-15 2 views
5

Предположим, что у меня есть файл XML, который должен выглядеть следующим образом:Как (частично) десериализации XML с ошибками, используя XStream

<list> 
<item> 
    <id>123</id> 
    <name>someName</name> 
</item> 
<item> 
    <id>234</id> 
    <name>anotherName</name> 
</item> 
<item> 
    <id>345</id> 
    <name>aThirdName</name> 
</item> 
</list> 

я разобрать его, используя XStream и следующие классы:

class ListXML { 
public List<ItemXML> list; 
} 

class ItemXML { 
public String id; 
public String name; 
} 

и следующий код:

XStream xstream = new XStream(new DomDriver()); 
xstream.alias("list", ListXML.class); 
xstream.alias("item", ItemXML.class); 
xstream.addImplicitCollection(ListXML.class, "item"); 
ListXML result = (ListXML) xstream.fromXML(in); 

Пока все хорошо. Тем не менее, сейчас я наткнулся на случае, когда я имел следующий XML в качестве входных данных:

<list> 
<item> 
    <id>123</id> 
    <name>someName</name> 
</item> 
<item> 
    <id>234</id> 
    <aTagUnknownToMe>blabla</aTagUnknownToMe> 
</item> 
<item> 
    <id>345</id> 
    <name>aThirdName</name> 
</item> 
</list> 

Есть ли способ изменить свой код, чтобы быть «более надежными», так что я могу достать из пунктов с идентификатором 123 и 345 без знания тега aTagUnknownToMe?

ответ

1

Да, вы можете.

XStream xstream = new XStream(); 
xstream.ignoreUnknownElements(); 

или

XStream xstream = new XStream(); 
xstream.ignoreUnknownElements("somePattern"); 

Эти методы доступны, так как XStream 1.4.5.

Смежные вопросы