JAXB Unmarshal一个未打开的对象列表

时间:2013-09-27 01:33:49

标签: java xml list jaxb unmarshalling

我必须在Java对象中解析XML,而XML包含一个展开的对象的展开列表:

<main>
    <mainPropA>Main Property A</mainPropA>
    <mainPropB>Main Property B</mainPropB>
    <elements>
        <propA>Property A1</propA>
        <propB>Property B1</propB>
        <propA>Property A2</propA>
        <propB>Property B2</propB>
        ...
    </elements>
</main>

所以在这种情况下我的Java代码应该是这样的:

public class MainClass {
    private String mainPropA;
    private String mainPropB;
    private List<Element> elements;
}

public class Element {
    private String propA;
    private String propB;
}

我无法弄清楚如何映射这个。

我尝试了以下映射,可以在列表中填充第一个元素,但不能填充其他元素。

@XmlRootElement(name = "main")
@XmlAccessorType(XmlAccessType.FIELD)
public class MainClass {
    private String mainPropA;
    private String mainPropB;
    @XmlElement(name = "elements")
    private List<Element> elements;
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Element {
    private String propA;
    private String propB;
}

我尝试了各种注释组合,但上面的注释使我最接近于看到除null之外的其他内容。

有没有办法让它发挥作用?

我无法更改即将发布的XML,因此无法使用。

我正在使用JAXB,但我没有以任何方式束缚它。同样使用Java 7,如果这有任何区别。

1 个答案:

答案 0 :(得分:0)

试试这个

    @XmlRootElement(name = "main")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class MainClass {
        @XmlElement(name = "mainPropA")
        private String title;
        @XmlElement(name = "mainPropB")
        private String author;
        private Elements elements;

        @XmlAccessorType(XmlAccessType.FIELD)
        static class Elements {
            List<String> propA;
            List<String> propB;
        }
    }
}