忽略XML模式中的父元素

时间:2011-02-21 20:36:13

标签: xml xsd jaxb

我有一个xml文件,如下所示:

<RootItem>
  <Items>
    <Item />
    <Item />
    <Item />
  </Items>
  <Values>
    <Value />
    <Value />
    <Value />
  </Values>
  <AnotherItem />
</RootItem>

我正在使用Trang将其转换为.xsd架构,并使用xjc将架构转换为带注释的Java类(使用jaxB顺利运行以编组和解组我的文档)我唯一的问题是xjc给了我这些类:

  • RootItem.java
  • Items.java
  • Item.java
  • Values.java
  • Value.java
  • ObjectFactory.java(JaxB需要)

我不想要“Items”或“Values”类。如何格式化我的模式以告诉它忽略父元素并在RootItem类中创建一个“List items”对象?

我想要的是什么:

  • RootItem.java
  • Item.java
  • Value.java
  • ObjectFactory.java(JaxB需要)

谢谢!

编辑:这是Trang生成的架构:

<xs:element name="RootItem">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="Items"/>
      <xs:element ref="Values"/>
    </xs:sequence>
    <xs:element name="AnotherItem" use="required" type="xs:NCName"/>
  </xs:complexType>
</xs:element>

<xs:element name="Items">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="unbounded" ref="Item"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="Values">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="unbounded" ref="Value"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:3)

您始终可以从Java类开始。您可以使用@XmlElementWrapper来获取分组元素“Items”和“Values”。

注意: JAXB不需要对象工厂。 JAXB可以利用像@FmlRegistry注释的ObjectFactory这样的类上的元数据。