当一个或多个元素是一个列表(maxOccurs = unbounded)时,是否有可能让JAXB忽略<sequence>中元素的顺序?

时间:2017-12-13 21:31:08

标签: java xml xsd xml-parsing jaxb

我一直无法找到答案。 <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中定义的不同?

1 个答案:

答案 0 :(得分:0)

我不知道JAXB的完整解决方案。

但是,

的JAXB绑定

<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类有一个(类型化的)List childrenOrName,而不是两个单独的属性(在这种情况下,你会丢失你的名字元素的位置)
  • 您必须手动检查列表中只有一个名称。