首页 > 解决方案 > JAXB/XSD:数字而不是元素名称

问题描述

我必须从 xml 文件创建 Java 对象(在转换之前我无法编辑),所以我认为创建 XSD 然后通过 JAXB 解组文件可能是最好的。问题是,该 XML 中有一些元素的格式如下:

<parent-element>
    <id-00001>...</id-00001>
    <id-00002>...</id-00002>
    ...
</parent-element>

所以基本上我有一个xml元素列表,元素的“名称”是列表中的顺序。每个列表中可能有无限数量的元素。是否可以使用 JAXB 解组它,还是我必须使用 XML-Reader 并循环遍历元素?“id-XXXXX”元素在内部都以相同的方式格式化,因此如果将其格式化为“”,则可能没有任何问题。

提前致谢!

标签: javaxmlxsdjaxb

解决方案


由于您的 xml 可能具有无限数量的“id 元素”,因此创建匹配的 POJO 结构是很棘手的。您可以使用@XmlAnyElement和适配器。@XmlAnyElement会将不同的元素读取为 dom 节点,您可以在适配器中处理它们。

例如,使用下面给出的 xml:

<parent-element>
    <id-00001>value 1</id-00001>
    <id-00002>value 2</id-00002>
</parent-element>

您的根可能如下所示:

@XmlRootElement(name = "parent-element")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlAnyElement
    @XmlJavaTypeAdapter(MyAdapter.class)
    private List<String> varyingElements;

}

你的适配器是这样的:

public class MyAdapter extends XmlAdapter<Element, String> {

    @Override
    public Element marshal(String arg0) throws Exception {
        // do what you must
        return null;
    }

    @Override
    public String unmarshal(Element element) throws Exception {
        return element.getChildNodes().item(0).getNodeValue();
    }

}

元素如org.w3c.dom.Element


推荐阅读