gpt4 book ai didi

java - jaxb:xsd 到 java,可以具有其他两个元素之一的父元素

转载 作者:行者123 更新时间:2023-12-02 04:26:38 25 4
gpt4 key购买 nike

我有一个名为 MESSAGE 的父元素。 MESSAGE 元素可以携带任何类型的OBJECT(通常是复杂类型),但一次只能携带一个对象。我从 XML 文件开始到 XSD,然后到 java,如下所示:

<xs:element name="MESSAGE">
<xs:complexType>
<xs:sequence>
<xs:element name="OBJECT"/>
<xs:complexType>
<xs:sequence>
<!-- Definition here -->
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>

我有很多具有 MESSAGE 类型但包含不同 OBJECT 的 XML 文件。我已经生成了它们的等效 XSD,但只有第一个使用 xjc 转换为 java,而其余的则没有,因为错误 Message is already Defined。那么,如何在 XSD 中拥有可以接受任何 OBJECT 的通用 MESSAGE 元素呢?

最佳答案

如果MESSAGE里面的元素必须是已定义元素的子集之一,使用 <choice> .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="MESSAGE">
<xsd:complexType>
<xsd:choice>
<xsd:element name="A" type="xsd:string"/>
<xsd:element name="B" type="xsd:string"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>

如果MESSAGE里面的元素可以是任何定义的元素,使用 <any> .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="MESSAGE">
<xsd:complexType>
<xsd:sequence>
<any namespace="##targetNamespace"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="X" type="xsd:string"/>
<xsd:element name="Y" type="xsd:string"/>
</xsd:schema>

关于java - jaxb:xsd 到 java,可以具有其他两个元素之一的父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32064591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com