1

我有一个 XML 文件,它的 xml 架构中包含complexType一对。所以当我解组 xml 文件时,我想给 xml 解析器我的xml schema. 是否有可能做到这一点,如果可以,那么如何做到这一点?

编辑:在我之后unmarshal,我的对象中的每个字段都是空的。知道为什么吗?

4

1 回答 1

1

更新

您看到的问题是由于内容嵌套在NameAndAddress元素中。您可以引入一个拥有该实例的NameAndAddress类。PackageLabel

包装标签

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {

    @XmlElement(name="NameAndAddress")
    private NameAndAddress nameAndAddress;

}

姓名和地址

import javax.xml.bind.annotation.XmlElement;

public class NameAndAddress {

    @XmlElement(name="Name")
    private String name;

    @XmlElement(name="Address1")
    private String address1;

    @XmlElement(name="Address2")
    private String address2;

    @XmlElement(name="City")
    private String city;

    @XmlElement(name="State")
    private String state;

    @XmlElement(name="ZipCode")
    private String zipCode;

}

EclipseLink JAXB (MOXy) 的 @XmlPath 扩展

或者,您可以使用EclipseLink JAXB (MOXy)@XmlPath中的扩展:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {

    @XmlPath("NameAndAddress/Name/text()")
    private String name;

    @XmlPath("NameAndAddress/Address1/text()")
    private String address1;

    @XmlPath("NameAndAddress/Address2/text()")
    private String address2;

    @XmlPath("NameAndAddress/City/text()")
    private String city;

    @XmlPath("NameAndAddress/State/text()")
    private String state;

    @XmlPath("NameAndAddress/ZipCode/text()")
    private String zipCode;

}

了解更多信息


您可以在 Unmarshaller 的实例上设置 XML 模式。这将导致 JAXB 在将 XML 转换为对象时验证输入:

如果要从 XML 模式生成对象模型,还可以使用 JAXB 来执行此操作:

于 2011-06-15T22:47:52.617 回答