使用JAXB解组具有可变/动态名称的元素

tan

我正在解析一个具有以下节点的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">元素的情况下,如何处理这种情况的任何想法

克里斯·戴尔(Chris Dail):

如果名称确实是动态的,那么我认为JAXB不会为您提供帮助。如果您有各种元素名称的定义数量,则可以像其他建议的那样使用继承。如果元素和名称的数量未知,我建议您使用如下所示的内容:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用jaxb解组名称空间的XML到Java对象

Jaxb:在同一个程序包中解组具有多个名称空间的xml

JAXB编组具有相同名称的元素的变量列表

使用JAXB解组列表

具有名称空间解组功能的JAXB(使用REST服务中的Jersey)

具有字段名称索引的XML解组动态响应

解组具有可变子类型的XML

元素具有名称空间时的JAXB解组问题

具有特定类型但名称未知的JAXB元素

jaxb与名称空间解组

如何在具有相同标签名称的Java中解组嵌套的子元素?

如何使用pl / pgsql将具有动态元素名称的JSON数据转换为行?

JAXB:具有2个名称空间的解组对象将导致空值

CNN中的Tensorflow可变动态尺寸

JAXB XML动态解组

具有内部可变性的单元,允许任意突变动作

从具有动态元素名称的表单中检索帖子值

具有可变动态值数量的Highcharts Stacked Colum

如何使用JAXB和Spring将具有重复项的XML解组

获取具有相同名称JAXB的多个XML元素

JAXB解组具有相同名称和不同属性的外部和内部标签

具有相同名称的JAXB解组元素

如何使用 Selenium WebDriver 在每个页面加载时查找具有动态 ID/名称更改的元素

使用 JAXB,如何将具有属性定义类型的 XML 元素解组为基于该属性的对象?

JAXB 解组:意外元素

JAXB 解组 - 未找到具有默认根元素的描述符...

使用动态名称生成时如何避免具有相同 ID/名称的不同 html 元素

从具有动态元素名称的 JSON 列中读取

Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素