忽略 XML 架构中的父元素
我有一个如下所示的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您始终可以从 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.