我有一个像这样的元素<someElement a="" b="" number="1" scale="meters"><child/></someElement>

标度和数字始终一起出现,但是它们并没有在一个排他元素中定义。

someElement元素解组到SomeElement Java实例时,我希望SomeElement类中的单个成员表示numberscale

目前,数字和小数位都是属性,然后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

10-06 14:47