java - JAXB 在解码时将多个属性转换为一种类型

标签 java xml jaxb w3c unmarshalling

图像我有一个像这样的元素 <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 节点。

了解更多信息

更新

或者,您可以针对此用例使用 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;

}

了解更多信息

关于java - JAXB 在解码时将多个属性转换为一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936104/

相关文章:

访问 asp.net Web API 时 android 中的 java.net.MalformedURLException

java - 存储唯一整数的好方法

java - 获取多个同名的 XML 元素 JAXB

spring - 创建一个JAXB Unmarshaller池

java - java中基于密码的加密/解密: fails to decrypt the file even though the password is identical

java - 设置 JTextField 宽度以匹配 JPanel 的宽度

java - 我需要将 admob 智能横幅放在应用程序底部(如果可能,使用 XML)

c# - 基于文本树创建 XML

Java:如何将 XML 流拆分为具有父节点的小型 XML 文档。 VTD-XML

java - 将 Jaxb Pojos 序列化到多个或不同的命名空间