忽略 XML 架构中的父元素

发布于 2024-10-19 01:43:54 字数 1558 浏览 2 评论 0原文

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

I have an xml file that looks like this:

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

I'm using Trang to translate this into a .xsd schema, and using xjc to translate the schema into annotated Java classes (that work smoothly with jaxB to marshal and unmarshall my documents) My only problem is that xjc gives me these classes:

  • RootItem.java
  • Items.java
  • Item.java
  • Values.java
  • Value.java
  • ObjectFactory.java (required by JaxB)

I don't want a "Items" or a "Values" class. How do I format my schema to tell it to ignore the parent element and just make a "List items" object in my RootItem class?

What I want:

  • RootItem.java
  • Item.java
  • Value.java
  • ObjectFactory.java (required by JaxB)

Thanks!

Edit: Here's the schema generated by 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯角 2024-10-26 01:43:54

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

笔记:
JAXB 不需要对象工厂。 JAXB 可以利用使用 @XmlRegistry 注释的类(例如 ObjectFactory)上的元数据。

You can always start from Java classes. You can use @XmlElementWrapper to get the grouping elements "Items" and "Values".

Note:
JAXB does not require the object factory. JAXB can leverage metadata on a class like ObjectFactory that is annotated with @XmlRegistry.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文