有没有办法用单个 java bean 来为这样简单的 xml 进行映射:
<item lang="en">
<item-url>some url</item-url>
<parent id="id_123"/>
</item>
我尝试过这样的事情:
@XmlRootElement( name = "item" )
public class Item {
@XmlElement( name = "item-url" )
private String url;
@XmlAttribute( name = "parent/@id" )
// Of course XPath doesn't work here, but it would be great...
private String parentId;
}
换句话说 - 如何在不创建相应 bean 的情况下访问内部元素的属性?
最佳答案
您可以使用XmlAdapter
:
ParentIdAdapter
public class ParentIdAdapter extends XmlAdapter<ParentIdAdapter.AdaptedParentId, String> {
public String unmarshal(AdaptedParentId value) {
return value.id;
}
public AdaptedParentId marshal(String value) {
AdaptedParentId adapted = new AdaptedParentId();
adapted.id = value;
return adapted;
}
public static class AdaptedParentId {
@XmlAttribute
public String id;
}
}
项目
@XmlRootElement( name = "item" )
public class Item {
@XmlElement( name = "item-url" )
private String url;
@XmlElement( name = "parent" )
@XmlJavaTypeAdapter(ParentIdAdapter.class)
private String parentId;
}
<小时/>
如果您使用EclipseLink MOXy作为您的 JAXB 提供商,您可以利用 @XmlPath
扩展来执行以下操作:
@XmlRootElement( name = "item" )
public class Item {
@XmlElement( name = "item-url" )
private String url;
@XmlPath("parent/@id")
private String parentId;
}
关于java - 以最简单的方式访问内部元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391043/