我有一个XML文件,其xml架构中包含了一对complexType
。所以当我解组xml文件时,我想给xml解析器my xml schema
。是否可以这样做,如果是的话,那该怎么做呢?
编辑:在我unmarshal
之后,我的对象中的每个字段都为空。知道为什么吗?
答案 0 :(得分:1)
<强>更新强>
您看到的问题是由于内容嵌套在NameAndAddress
元素中。你可以介绍一个NameAndAddress
类让PackageLabel
持有一个实例。
<强> 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;
}
<强> 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来执行此操作: