6

Given the following XML

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

Is it possible with JAXB to unmarshal the <map> elements into a single class Map containing values and attributes of <source> and <target>?

@XmlRootElement
class Map {

   @XmlElement
   String source;

   @???
   String srcAttr;

   @XmlElement
   String target;

   @???
   String trgAttr;
}

I don't want to create extra classes for Source and target.

4

2 回答 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;

}

了解更多信息

于 2013-07-02T11:38:56.957 回答
2

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

这也可能是有用的 jaxb 示例和这个oracle 示例

于 2013-07-02T10:57:34.237 回答