2012-08-22 126 views
1

我有xml返回喜欢独特的价值,解组使用JAXB

<UniequeTestList> 
<UniequeTest> 
    <FirstName>a</FirstName> 
    <LastName>b</LastName> 
</UniequeTest> 
<UniequeTest> 
    <FirstName>a</FirstName> 
    <LastName>b</LastName> 
</UniequeTest> 
</UniequeTestList> 

我解组它List<UniequeTest>使用JAXB。 显然,该列表必须具有相同的多个对象。 我可以在解开它的同时使它变得非常单调吗?

我不能使用HashSet或LinkedHashSet使它在同一时间unieque。我的意思是,如果在该对象下的值相同,我想在Unmarshall列表中显示的是unieque对象。

+0

你可以扩展你的意思是“使它独特”吗? –

+0

JAXB用于将您的XML数据转换为定义的Java类。如果您需要修改文件中的“数据”(例如,使其具有唯一性),则应事先使用XSLT操作它,或者在JAXB将它们填充到Collection中之后,只处理Java对象中的数据。 – Brad

+0

@BlaiseDoughan我的意思是,如果Unmarshall列表中的值与该对象下的值相同,那么它就是unieque对象。 – Ketan

回答

3

最后,您可以使用监听器JAXB的Unmarshaller:

class JAXBUnmarshallingListener extends Unmarshaller.Listener { 

    @Override 
    public void beforeUnmarshal(Object target, Object parent) { 
    } 

    @Override 
    public void afterUnmarshal(Object target, Object parent) { 
    } 
} 

在回调方法,你可以实现一个简单的缓存,并通过自己的唯一实例(新JAXB替代由JAXB新创建的对象实例将被垃圾回收,因为没有人继续引用它。注意,这个方法不会节省实例化的成本和这些对象的gc)。