che*_*tan 7 java xml orm serialization jaxb
我正在解析一个包含如下节点的XML文档:
<objects>
<dog>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</dog>
<cat>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</cat>
</objects>
Run Code Online (Sandbox Code Playgroud)
元素data1,data2,data3始终是一致的.只有父标签有所不同.在我的对象模型中,我有一个Object,它代表所有这些情况.如何在不事先知道元素名称的情况下让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;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何处理这种情况不会改变传入的XML格式使用<object type="dog">元素?
如果名称真的是动态的,那么我认为JAXB不会帮助你.如果您有各种元素名称的定义数量,那么您可以像建议的其他帖子一样使用继承.如果元素和名称的数量未知,我建议使用这样的东西:
@XmlMixed
@XmlAnyElement
public List<Object> getObjects() {
return objects;
}
Run Code Online (Sandbox Code Playgroud)
这会使元素只是一个DOM元素.然后,您可以再次使用JAXB将每个元素转换为自定义类型.
那就是你必须使用JAXB.您可能会发现直接将SAX或DOM API用于此类数据会更容易.JAXB实际上适用于可以表示为模式的定义良好的数据.