我正在解析一个具有以下节点的XML文档:
<objects>
<dog>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</dog>
<cat>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</cat>
</objects>
元素data1,data2,data3始终保持一致。仅父标记有所不同。在我的对象模型中,我有一个代表所有这些情况的对象。在不事先知道元素名称的情况下,如何让JAXB处理这种情况?
@XMLAnyElement匹配所有对象,但不会创建适当类型的对象;我得到一个Node对象列表,而不是我的对象。我的对象当前看起来像:
public class MyObject {
protected String otherData;
@XmlAnyElement
@XmlElementWrapper(name = "objects")
protected List<MyChildObject> childObjects;
}
public class MyChildObject {
protected String data1;
protected String data2;
protected String data3;
}
在不更改传入XML格式以使用<object type="dog">
元素的情况下,如何处理这种情况的任何想法?
如果名称确实是动态的,那么我认为JAXB不会为您提供帮助。如果您有各种元素名称的定义数量,则可以像其他建议的那样使用继承。如果元素和名称的数量未知,我建议您使用如下所示的内容:
@XmlMixed
@XmlAnyElement
public List<Object> getObjects() {
return objects;
}
这将使该元素仅仅是一个DOM元素。然后,您可以再次使用JAXB将每个元素转换为自定义类型。
那就是如果您必须使用JAXB。您可能会发现,直接将SAX或DOM API直接用于此类数据会更容易。JAXB实际上旨在用于定义良好的数据,这些数据可以表示为模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句