Игнорировать родительский элемент в XML-схеме - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть 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?

Что я хочу:

  • RootItem.java
  • Item.java
  • Value.java
  • ObjectFactory.java (требуется JaxB)

Спасибо!

Редактировать: вот схема, сгенерированная Трангом:

<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 Ответ

3 голосов
/ 21 февраля 2011

Вы всегда можете начать с классов Java.Вы можете использовать @XmlElementWrapper для получения группирующих элементов «Элементы» и «Значения».

Примечание: JAXB не требует фабрики объектов.JAXB может использовать метаданные в классе, подобном ObjectFactory, который аннотирован @ XmlRegistry.

...