我一直找不到这个问题的答案。 <all>
标签不是答案,因为它将子元素限制为 maxOccurs=“1”
.
假设您的 XSD 包含:
<xsd:sequence>
<xsd:element name=“name” type=“xsd:string” minOccurs=“1”/>
<xsd:element name=“children” type=“xsd:string” minOccurs=“0” maxOccurs=“unbounded”/>
</xsd:sequence>
是否有任何方法可以让 JAXB 使用此 XSD 来读取 XML,其中元素的顺序与 XSD 中定义的顺序不同?
最佳答案
我不知道 JAXB 的完整解决方案。
但是,JAXB 绑定(bind)
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="children" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:choice>
</xs:complexType>
将解码您想要的实例,并在再次编码它们时保持它们稳定。
缺点是:
- 相应的 Java 类有一个(类型化)ListchildrenOrName,而不是两个单独的属性(在这种情况下,无论如何您都会失去 name 元素的位置)
- 您必须手动检查列表中是否只有一个名字。
关于java - 当一个或多个元素是列表时(maxOccurs=unbounded),是否可以让 JAXB 忽略 <sequence> 中元素的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802418/