【问题标题】:Ignore parent element in XML schema忽略 XML 模式中的父元素
【发布时间】:2011-02-21 20:36:13
【问题描述】:

我有一个如下所示的 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 需要)

谢谢!

编辑:这是 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>

【问题讨论】:

  • 向我们展示 XML 架构,我们会建议如何更改它。
  • 我添加了 Trang 当前生成的 XML 模式

标签: xml xsd jaxb


【解决方案1】:

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

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

【讨论】:

  • 谢谢,这行得通。我仍然很好奇是否有办法在模式中指定包装器元素,但这解决了我的问题。你是最棒的!
猜你喜欢
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多