JAXB:用给定的XML模式解组XML文件
我有一个XML文件,它的XML模式包含耦合JAXB:用给定的XML模式解组XML文件,jaxb,unmarshalling,Jaxb,Unmarshalling,我有一个XML文件,它的XML模式包含耦合complexType。因此,当我解组xml文件时,我想给xml解析器我的XMLschema。有可能做到吗?如果有,怎么做 编辑:在I解组后,对象中的每个字段都为空。知道为什么吗?更新 您看到的问题是由于内容嵌套在nameanddress元素中。您可以引入一个nameanddress类,让PackageLabel持有该类的一个实例 包装标签 import java.io.Serializable; import javax.xml.bind.annot
complexType
。因此,当我解组xml文件时,我想给xml解析器我的XMLschema
。有可能做到吗?如果有,怎么做
编辑:在I
解组
后,对象中的每个字段都为空。知道为什么吗?更新
您看到的问题是由于内容嵌套在nameanddress
元素中。您可以引入一个nameanddress
类,让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扩展
或者,您可以在以下位置使用@XmlPath
扩展名:
了解更多信息
可以在解组器实例上设置XML架构。这将导致JAXB在将XML转换为对象时验证输入:
nameanddress
元素中。您可以引入一个nameanddress
类,让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扩展
或者,您可以在以下位置使用@XmlPath
扩展名:
了解更多信息
可以在解组器实例上设置XML架构。这将导致JAXB在将XML转换为对象时验证输入:
解组
之后,我的对象中的所有字段都是空的
。我在我原来的帖子里贴了一些代码。非常感谢你,布莱斯。顺便说一句,你的博客太棒了。@Harry Pham-我已经更新了我对你问题的答案。我很高兴听到你喜欢这个博客:)。你是JAXB团队的开发人员,问这个问题很快。我有JAXB的简单实现。因此,对于给定的XML文件,我解析标记,获取标记名,然后将set
放在标记名前面,以生成setter方法
。例如,在解析标记Name
之后,我将其更改为setName
,然后使用反射调用setName
方法,如method=PackageLabel.class.getDeclaredMethod(methodName,String.class);调用(这个,值)代码>。我知道反思是昂贵的。你会说JAXB正在做类似的事情,还是说JAXB比这优化多了。@Harry Pham-以下内容可能会有所帮助。如果你不继续,提出一个新问题,我可以帮助你。嗨,我会单独发布这个问题,但与此同时,你能再看看我原来的帖子吗。由于某种原因,在解组
之后,我的对象中的所有字段都是空的
。我在我原来的帖子里贴了一些代码。非常感谢你,布莱斯。顺便说一句,你的博客太棒了。@Harry Pham-我已经更新了我对你问题的答案。我很高兴听到你喜欢这个博客:)。你是JAXB团队的开发人员,问这个问题很快。我有JAXB的简单实现。因此,对于给定的XML文件,我解析标记,获取标记名,然后将set
放在标记名前面,以生成setter方法
。例如,在解析标记Name
之后,我将其更改为setName
,然后使用反射调用setName
方法,如method=PackageLabel.class.getDeclaredMethod(methodName,String.class);调用(这个,值)代码>。我知道反思是昂贵的。您会说JAXB正在做类似的事情,还是说JAXB比这优化得多。