我有一个 XML 文件,它的 xml 架构中包含complexType
一对。所以当我解组 xml 文件时,我想给 xml 解析器我的xml schema
. 是否有可能做到这一点,如果可以,那么如何做到这一点?
编辑:在我之后unmarshal
,我的对象中的每个字段都是空的。知道为什么吗?
我有一个 XML 文件,它的 xml 架构中包含complexType
一对。所以当我解组 xml 文件时,我想给 xml 解析器我的xml schema
. 是否有可能做到这一点,如果可以,那么如何做到这一点?
编辑:在我之后unmarshal
,我的对象中的每个字段都是空的。知道为什么吗?
更新
您看到的问题是由于内容嵌套在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 来执行此操作: