使用JAXB解组具有不同/动态名称的元素 [英] Using JAXB to unmarshall elements with varying/dynamic names

查看:727
本文介绍了使用JAXB解组具有不同/动态名称的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在解析一个包含如下节点的XML文档:

I'm parsing an XML document that has nodes like the following:

<objects>
  <dog>
    <data1>...</data1>
    <data2>...</data2>
    <data3>...</data3>
  </dog>
  <cat>
    <data1>...</data1>
    <data2>...</data2>
    <data3>...</data3>
  </cat>
</objects>

元素data1,data2,data3始终保持一致。只有父标签有所不同。在我的对象模型中,我有一个Object,它代表所有这些情况。如何在不事先知道元素名称的情况下让JAXB处理这种情况?

The elements data1, data2, data3 are always consistent. Only the parent tag varies. In my object model I have a single Object which represents all of these cases. How can I get JAXB to handle this case without knowing in advance the name of the element?

@XMLAnyElement匹配所有对象但不创建相应类型的对象;我得到一个Node对象列表而不是我的对象。我的对象目前看起来像:

@XMLAnyElement matches all the objects but doesn't create an object of the appropriate type; I get a list of Node objects instead of my object. My object currently looks something like:

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> 元素?

Any ideas how to handle this case short of changing the incoming XML format to use <object type="dog"> elements?

推荐答案

如果名称真的是动态的,那么我认为JAXB不会帮助你。如果您有各种元素名称的定义数量,那么您可以使用继承,就像建议的其他帖子一样。如果元素和名称的数量未知,我建议使用以下内容:

If the name is truely dynamic, then I don't think JAXB will help you these. If you have a defined number of various element names then you could use inheritance like the other post suggested. If the number of elements and names is unknown I would recommend using something like this:

@XmlMixed
@XmlAnyElement
public List<Object> getObjects() {
    return objects;
}

这会使元素只是一个DOM元素。然后,您可以再次使用JAXB将每个元素转换为自定义类型。

This would bring the element is a just a DOM element. You could then use JAXB a second time to go from each of the elements into your custom type.

如果必须使用JAXB,那就是这样。您可能会发现直接将SAX或DOM API用于此类数据会更容易。 JAXB实际上适用于可以表示为模式的定义良好的数据。

That would be if you had to use JAXB. You might find it easier to just use the SAX or DOM APIs directly for data like this. JAXB is really intended for well defined data that can be represented as a schema.

这篇关于使用JAXB解组具有不同/动态名称的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆