使用JAXB(Moxy)</string>从XML获取List <string>

时间:2012-03-22 05:44:17

标签: xml eclipselink jaxb2 java-6 moxy

我使用的是jdk1.6和eclipselink-2.3.2.v20111125-r10461

我的XML类似于:

<alpha>
     <beta>
            <omega>abcd</omega>
            <gamma>
                <delta>001</delta>
                <delta>002</delta>
                <delta>003</delta>
            </gamma>
     </beta>
</alpha>

<alpha> <beta> <omega>abcd</omega> <gamma> <delta>001</delta> <delta>002</delta> <delta>003</delta> </gamma> </beta> </alpha>

我的带注释的bean看起来像:

@XmlRootElement(name = "alpha")
@XmlAccessorType(XmlAccessType.FIELD)
public Class Alpha {

    @XmlPath("beta/omega/text()")
    private String omegaValue;

    @XmlElement(name = "delta")
    @XmlElementWrapper(name = "gamma")
    private List<String> deltaList;

    public String getOmegaValue() {
        return omegaValue;
    }

    public void setOmegaValue(String omegaValue) {
        this.omegaValue = omegaValue;
    }

    public List<String> getDeltaList() {
        return deltaList;
    }

    public void setDeltaList (List<String> deltaList ) {
        this.deltaList = deltaList ;
    }
}

在我的测试代码中,我执行以下操作来检查列表,但它是空的。 @XmlRootElement(name = "alpha") @XmlAccessorType(XmlAccessType.FIELD) public Class Alpha { @XmlPath("beta/omega/text()") private String omegaValue; @XmlElement(name = "delta") @XmlElementWrapper(name = "gamma") private List<String> deltaList; public String getOmegaValue() { return omegaValue; } public void setOmegaValue(String omegaValue) { this.omegaValue = omegaValue; } public List<String> getDeltaList() { return deltaList; } public void setDeltaList (List<String> deltaList ) { this.deltaList = deltaList ; } }

我在这里做错了什么? omegaValue工作正常。请帮忙,谢谢。

1 个答案:

答案 0 :(得分:2)

deltaList属性的映射缺少测试版级别。您可以使用@XmlPath注释并执行以下操作:

@XmlPath("beta/gamma/delta/text()")
private List<String> deltaList;

了解更多信息