java - 以最简单的方式访问内部元素的属性

标签 java jakarta-ee jaxb

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

相关文章:

当我尝试向客户添加另一个产品时发生 java.lang.StackOverflowError

java - 有状态bean不保持状态

java - 如何在 struts2 文本字段标签中将日历对象转换为日期

java - 创建方法和对象

java - 另一种打印我的方法的方法?

java - 我可以用代码替换 jaxb.properties 吗?

java - 将 Java 对象转换为 XML

java - JAXB 将引用列表绑定(bind)到另一个元素

java - Long 变量的空指针异常

java - 我可以在 MDB 中获取源 JMS session 吗?