我们正在使用JAXb来解析没有架构的XML ...
我们处理的XML之一如下:
<Trade>
<Something1>
<!-- stuff here -->
</Something1>
</Trade>
而另一个是这样的:
<Trade>
<Something2>
<!-- stuff here -->
</Something2>
</Trade>
我们使用相同的Jaxb上下文和unmarshaller将它们解析为对象,比如说Something1
和Something2
(Something1
和Something2
都实现了一个名为{{1}的接口解组的结果被强制转换为Something
。当然,这两个对象都是上下文已知的。但是,根据unmarshaller首先找到的类,这两个XML最终都会被解组为Something
或Something1
个对象。
我还尝试添加了一些XML-&gt; XSD生成的模式,但这是一个死胡同,因为这是Something2
和其他几个标签的冲突。我得到的错误就像:
<Trade>
是否无法使用JAXB统一处理两个类似结构的XML?
提前致谢。
答案 0 :(得分:0)
您可以像这样编写元素贸易类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TradeType", propOrder = {
"something1",
"something2"
})
public class TradeType {
@XmlElement(name = "Something1")
protected Something1Type something1;
@XmlElement(name = "Something2")
protected Something2Type something2;
// getters, setters
}
BTW,这是您编译(xjc)此XML架构时所获得的:
<xs:complexType name="TradeType">
<xs:choice>
<xs:element name="Something1" type="Something1Type"/>
<xs:element name="Something2" type="Something2Type"/>
</xs:choice>
</xs:complexType>
您只需要一个顶级元素Trade,并且可以通过将trade.getSomethingX()
与null进行比较来区分(在解组之后)。
如果Something1Type和Something2Type类型相同(不是“相似”),则可以使用相同的类(不是接口)。