如何使用JAXB将子元素属性绑定到字段?

6

假设有以下XML

<mappings>
  <map>
     <source srcAttr="oof">foo</source>
     <target trgAttr="rab">bar</target>
  </map>
  <map>
    ...

使用JAXB,将<map>元素解组成一个包含<source><target>的值和属性的单个类Map,这样做是可行的吗?请注意保留HTML标记。
@XmlRootElement
class Map {

   @XmlElement
   String source;

   @???
   String srcAttr;

   @XmlElement
   String target;

   @???
   String trgAttr;
}

我不想为源和目标创建额外的类。
2个回答

5
请注意:我是EclipseLink JAXB (MOXy)的负责人和JAXB (JSR-222)专家组成员。
您可以使用MOXy的@XmlPath扩展来处理此用例。
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Map {

   String source;

   @XmlPath("source/@srcAttr")
   String srcAttr;

   String target;

   @XmlPath("target/@trgAttr")
   String trgAttr;

}

更多信息


2
这真是奢侈的享受 ;-) 不幸的是,我必须坚持使用Java标准。 - Udo

2

是的!只需用@XmlAttribute注释替换???即可。

此外,这可能会有所帮助jaxb示例oracle示例


这将把XML属性放入map元素而不是sourcetarget元素中。FYI - 这是如何使用MOXy的@XmlPath扩展来处理此用例的方法:https://dev59.com/K3PYa4cB1Zd3GeqPpf3i#17424618 - bdoughan
将XML属性放入地图元素中,而不是源和目标元素 - 看起来这正是Udo想要的。 - Tala
由于我只对非编组感兴趣,所以这正是我想要的!没想到会这么容易 :-) - Udo
1
但是这个属性不在源代码中,还是我漏掉了什么? - Christian Kuetbach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接