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

标签 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 中定义的顺序不同?

最佳答案

我不知道 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/

相关文章:

java - 将存储为变量的值添加到 java 列表时出现问题

java - 在 Java 中搜索

c - XML 文档如何与 GTK 一起工作来创建用户界面?

java - Spring:xsi:schemaLocation无法从spring.schemas读取配置

xml - 如何将 XML 从一个 XSD 转换为另一个 XSD?

java - 一个 JPanel 中更新另一个 JPanel 中的单击事件

java - 如何从调用者的范围抛出异常?

java - 如何将 Spinner 菜单设置为 DropDown 而不是对话框样式?

xml - 不同的默认命名空间中元素的 XPath 是什么?

xsd - 在 SDL Tridion 2011 SP1 中为多值架构字段添加多个默认值