在我的 Java (Maven) 项目中,我使用JAXB 2.2.11从我们的服务器接收到的 XML 有效负载重建类的实例。我有一个.xsd
定义类的模式,它与 JAXB 结合使用可以很好地重建我想要的类型的实例。我遇到的问题是这些有效载荷可以(没有任何通知或警告)具有我并不真正关心的额外元素。
这些额外元素可以出现的地方之一是xs:all
标签内。我确实喜欢具有所述xs:all
标签的功能:
all 元素指定子元素可以以任何顺序出现,并且每个子元素可以出现零次或一次。
但是,我不想在处理包含额外属性的 XML 有效负载时出现解析错误。里面的xs:any
标签xs:all
会很好用,但在 XSD 1.0 中是不允许的(根据w3schools和其他SO 答案),显然,JAXB 不支持 XSD 1.1。此外,JAXB
处理 theany
或 the的anyAttribute
方式非常有趣,因为它将所有未知节点放入地图中,所以我可以记录它说“嘿!我们正在接收一个我们现在并不真正关心的属性,但是也许你会发现它在未来有些用处?”
我读过支持 XSD 1.1 的Xsom,但显然,它不会返回您想要的类的实例,而是更通用的哈希映射和列表集,因此失去了我的类型检查,这是我不做的不想。
所以......有没有办法假装在一个xs:any
内xs:all
?