java简单XML反序列化同名的不同元素类型
我正在尝试用Java反序列化这段XML:
<anime id="16986">
<info type="Picture" src="http://~.jpg" width="141" height="200">
<img src="http://~" width="141" height="200"/>
<img src="http://~" width="318" height="450"/>
</info>
<info type="Main title" lang="EN">Long Riders!</info>
<info type="Alternative title" lang="JA">ろんぐらいだぁす!</info>
</anime>
我遇到的问题是info
元素可以有一个img
的内联列表,也可以只包含文本。我想在我的AnimeHolder类中将info
作为@Element
处理,但我不能有重复的注释。我还想访问info的lang
属性来检查它是EN还是JP
我使用这些类来保存反序列化的数据:
@Root(name="anime", strict=false)
public class AnimeHolder {
@Attribute(name="id")
private String ANNID;
@ElementList(inline=true)
private List<InfoHolder> infoList;
public String getANNID() {
return ANNID;
}
public List<InfoHolder> getInfoList() {
return infoList;
}
}
至于信息项目:
@Root(name="info", strict = false)
public class InfoHolder {
@ElementList(inline=true, required = false)
private List<ImgHolder> imgList;
@Attribute(name = "lang", required = false)
private String language;
public List<ImgHolder> getImgList() {
return imgList;
}
}
# 1 楼答案
有了Andreas,我发现我需要研究如何处理混合内容。通过一些搜索,我找到了关于创建自定义
Converter
的solution。在写了我自己的并且发现它没有被调用之后,this帮助解决了这个问题。这是我重新设计的InfoHolder
类和转换器:我还需要使用
AnnotationStrategy
用Serializer
实例化一个SimpleXmlConverterFactory
,如下所示:使用自定义转换器公开XML节点,这使我能够确定
info
节点是否有img
子节点,如果没有,则获取节点值本身