java使用JAXB解析基于属性的xml
我正在使用JAXB解析一些xml
<countries>
<Name language="en">Australia</Name>
<Name language="se">Australien</Name>
</countries>
如果我在我的班级使用
@XmlElement(name = "Name", required = true)
protected List<Name> name;
一切正常。 然而,我只想得到language=“en”所在的属性
所以我在我的国家班上
protected String name
不是收藏
有没有一个很好的方法来解决这个问题,比如用一些注释
# 1 楼答案
注意:我是EclipseLink JAXB (MOXy)领导和JAXB (JSR-222)专家组成员
下面是处理这个用例的两种方法。第一个是更多的代码,但可以通过任何JAXB实现来完成。第二个是更少的代码,但需要使用EclipseLink JAXB(MOXy)
选项#1-任何JAXB(JSR-222)实现
演示
您可以使用过滤流读取器过滤掉不需要的元素,并让您的JAXB实现解组这些元素
国家
输入。xml
使用这种方法,输出中不包括语言属性:
输出
选项#2-ECLIPSELINK JAXB(MOXy)
我们将利用MOXy的
@XmlPath
扩展来映射到Name
元素,该元素有一个language
属性,其值为en
(请参见http://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html)国家
jaxb。属性
要使用MOXy作为JAXB提供程序,需要在与域模型相同的包中包含一个名为
jaxb.properties
的文件,并带有以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)演示
使用这种方法,元素过滤由
@XmlPath
映射处理,因此运行时部分变得更加简单。请注意,如何仅使用标准的JAXB运行时API输入。xml
输出
通过这种方法,
language
属性包含在输出中: