处理 JAXB 中的嵌套元素

2022-09-03 07:27:35

我想知道是否有可能让JAXB不为用作包装器的XML元素创建Java对象。例如,对于以下结构的 XML

<root>
    <wrapper>
        <entity/>
    </wrapper>
</root>

我根本不希望创建对象。所以对于像这样的类<wrapper>

class Root {
    private Entity entity;
}

元素应直接取消编入实体字段。<entity>

使用JAXB可以实现吗?


答案 1

尽管它需要额外的编码,但所需的取消编组是使用以下方式使用瞬态包装器对象完成的:

@XmlRootElement(name = "root")
public class Root {

    private Entity entity;

    static class Entity {

    }

    static class EntityWrapper {
        @XmlElement(name = "entity")
        private Entity entity;

        public Entity getEntity() {
            return entity;
        }
    }

    @XmlElement(name = "wrapper")
    private void setEntity(EntityWrapper entityWrapper) {
        entity = entityWrapper.getEntity();
    }

}

答案 2

EclipseLink MOXy 提供了带有扩展的 JAXB 2.2 实现。其中一项扩展功能是使用 XPath 在域模型中不需要的 XML 层之间导航。

如果你看看:

http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted/MOXyExtensions

您会注意到客户的名称存储在其中,但该名称是客户的字符串属性。这是通过以下方式完成的:

@XmlPath("personal-info/name/text()")
public String getName() {
    return name;
}

我希望这有帮助,

道格


推荐