我有一个像这样的元素<someElement a="" b="" number="1" scale="meters"><child/></someElement>
标度和数字始终一起出现,但是它们并没有在一个排他元素中定义。
将someElement
元素解组到SomeElement
Java实例时,我希望SomeElement
类中的单个成员表示number
和scale
。
目前,数字和小数位都是属性,然后afterUnmarshall()
方法用于计算一个数字。
有没有一种方法,而无需两个成员字段的大小和比例?也许使用XmlAdapter
?在这种情况下,我将如何使用它?
最佳答案
注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2 (JSR-222)专家组的成员。
MOXy提供了@XmlTransformation
扩展名,该扩展名使您可以将Java字段/属性表示为几个XML节点。
了解更多信息
http://blog.bdoughan.com/2010/08/xmltransformation-going-beyond.html
更新
或者,您可以在此用例中使用XmlAdapter
。适配器将负责将代表数字和小数位数的单一类型(在下面以FOO表示)转换为具有单独的数字和小数位数属性的类型。您仍然需要使用MOXy实现来利用@XmlPath
扩展名:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SomeElement {
@XmlAttribute
private String a;
@XmlAttribute
private String b;
@XmlJavaTypeAdapter(NumberAndScaleAdapter.class)
@XmlPath(".")
private FOO numberAndScale;
private Child child;
}
了解更多信息
http://blog.bdoughan.com/search/label/XmlAdapter
http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html