以最简单的方式访问内部元素的属性 [英] Access attribute of internal element in the most simple way
本文介绍了以最简单的方式访问内部元素的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有办法用单个 java bean 为这种简单的 xml 做映射:
Is there any way to do mapping with single java bean for such simple 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 的情况下访问内部元素的属性?
In other words - how can I access attribute of internal element without creating of corresponding 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 作为您的 JAXBprovider 那么您可以利用 @XmlPath
扩展来执行以下操作:
If you are using EclipseLink MOXy as your JAXB provider then you could leverage the @XmlPath
extension to do the following:
@XmlRootElement( name = "item" )
public class Item {
@XmlElement( name = "item-url" )
private String url;
@XmlPath("parent/@id")
private String parentId;
}
这篇关于以最简单的方式访问内部元素的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文