如何使用JAXB从一个类生成两个不同的结构xml

时间:2010-11-17 03:54:51

标签: jaxb

我有两个类,Node和Group,Group是Node的子类。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Node", propOrder = {
    "id",
    "children"
})
public class Node {

    protected int id;
    protected List<Node> children;
}

然后是小组课

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Group", propOrder = {
    "name"
})
public class Group extends Node{
   protected String name;
}

我已经定义了一个类Tree来包含Node类,所以在编组之后,xml将是

<tree>
  <children>
    <id>1</id>
    <children>
        <id>2</id>
    </children>
    <children>
        <id>3</id>
    </children>
  </children>
</tree>

还有另一个类组包含数组中的所有组,所以我希望xml应该是

<groups>
  <groups>
    <name>group-1</name>
  </groups>
  <groups>
    <name>group-2</name>
  </groups>
  <groups>
    <name>group-3</name>
  </groups>
</groups>

但是因为Group继承了Node,所以第二个总是像这样生成xml

<groups>
  <groups>
    <id>group-1</id>
    <name>group-1</name>
    <children>
      <id>2</id>
      <name>group-2</name>
    </children>
    <children>
      <id>3</id>
      <name>group-3</name>
    </children>
  <groups>
<groups>

我应该如何将两个不同的类视为不同的xml文件,即使它们是继承相关的。 我需要使用当前继承设计处理事物的对象。所以继承不能被删除。

如果我将@XmlTransient添加到Node的children属性,那么第二个xml将是我想要的那个,但是第一个xml不能生成我想要的那个。

我现在很困惑,不知道怎么做。

欢迎提出任何建议。

提前致谢。

1 个答案:

答案 0 :(得分:1)

通过利用EclipseLink JAXB (MOXy)中的扩展,您可以为对象模型提供多个XML表示。此扩展允许您通过XML表示提供其他映射。有关更多信息,请参阅: