以最简单的方式访问内部元素的属性 [英] Access attribute of internal element in the most simple way

查看:26
本文介绍了以最简单的方式访问内部元素的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法用单个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆