java - 以模块化方式添加命名空间属性

标签 java jaxb

对于 xml:

<foo xmlns="http://ns.com"
     xmlns:ext="http://ext.com"
     attr="xxx"
     ext:bar="yyy">
</foo>

如何创建 Foo 类?具体来说,我希望能够以某种方式分离“ext”属性,这样它就不直接在 Foo 中,而是在另一个类中,并且以类型安全的方式(所以不是 XmlAnyAttribute)。

我最希望的是:

class Foo {
  Ext ext;
}

class Ext {
  String bar;
}

最佳答案

如果引用的对象只有一个使用 @XmlValue 映射的字段/属性,则可以使用 @XmlAttribute 映射 POJO 字段/属性。

class Foo {
    @XmlAttribute(namespace="http://www.ext.com")
    Ext ext
}

分机

class Ext {
    @XmlValue
    String bar;
}

了解更多信息

<小时/>

更新

注意:我是EclipseLink JAXB (MOXy) JAXB 2 (JSR-222) 的领导者和成员专家组。

What if i want to map several attributes?

对于此用例,您可以利用 MOXy 中的 @XmlPath 扩展:

使用@XmlPath(".") 表示您希望目标对象在 XML 文档中与源对象处于同一级别。

class Foo {
    @XmlPath(".")
    Ext ext
}

分机

class Ext {
    @XmlAttribute
    String foo;

    @XmlAttribute
    String bar;
}

了解更多信息

关于java - 以模块化方式添加命名空间属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9975615/

相关文章:

java - JAXB - 如何序列化集合子类中的字段

xml - xjc 未按预期生成列表

java - 如果我们想要单个键多个值

java - findViewById() 可能会为 HomeFragment.java 中的 getView() 产生 NullPointerException

java - Android Studio 是如何启动垃圾收集器的,它是如何工作的?

java - 可以配置 JAXB 来防止实体扩展攻击吗?

java - Apache POI 只写入一条记录

java - java中数组的反射

java - 如何在 XSD 中指定属性 namespace 以便 JAXB 正确解释它?

Apache Camel 中的 JAXB 编码