java解析/反序列化XML到java对象
我开始了一个新的小项目,我想从XML中反序列化对象
我创建了一个xsd:
以及一个示例XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<hdb>
<country code="DE">
<variableHoliday daysAfterEaster="49" name="PENTECOAST" />
<fixedHoliday month="JANUARY" day="1" name="NEWYEAR" />
<region code="sa">
<fixedHoliday month="APRIL" day="1" name="FUNNYDAY" />
<variableHoliday daysAfterEaster="0" name="EASTERSUNDAY" />
</region>
<region code="ba">
<variableHoliday daysAfterEaster="12" name="CORPUSCHRISTI" />
</region>
</country>
<country code="US">
<fixedHoliday month="JULY" day="4" name="INDEPENDENCEDAY" />
</country>
<country code="AL">
<fixedHoliday month="JULY" day="4" name="INDEPENDENCEDAY" />
</country>
</hdb>
应该使用xsd等等
那么,如何将这些XML反序列化为一个好的Java对象结构呢
可能是:
class HDB {
private HashMap<CountryCode,Country> map;
}
class Country {
private List<Holiday> list; // or two Lists with <variableHoliday> and <fixedHoliday>
private List<Region> regions;
}
class Region{
private List<Holiday> list; // or two Lists with <variableHoliday> and <fixedHoliday>
}
class variableHoliday {
private String name;
private int daysAfterEaster;
}
class fixedHoliday {
private String name;
private int day;
private MonthName month; // while MonthName is an enum defined like the enum from XSD
}
有没有办法做到这一点
我想到了jaxb并尝试了一些东西,但在我看来(我是jaxb的初学者),很难实现这种XML结构,因为映射不能像这样编写 五,
# 1 楼答案
使用
为了生成POJO,xjc是jdk附带的xml java编译器
生成类后,使用jaxb,如下所示
JAXB编组
JAXB解组
更多信息请访问以下链接JAXB marshalling and unmarshalling
# 2 楼答案
JAXB-Java-to-XML绑定是实现高效XML-to-POJO的途径,正如上面的例子所指出的那样,反之亦然
另外,所需的工具与JDK捆绑在一起。创建对象绑定所需的唯一要求是无错误的XSD/XSD集
XJC
xjc:命令行参数为-p表示包名,d表示out dir等。详细信息可在xjc手册页/refereOnline page上找到
但如果实现涉及多个XSD,那么更喜欢使用xjb(绑定文件)
oracle关于XJBs的全面指南Guide
生成绑定后,只需使用类或包列表创建
JAXBContext
,包列表由以下内容分隔:也可以选择提供类加载器 最终的JAXBContext contextCustomClassLoader=JAXBContext。NewInstance(“…:…”,X级。getClassLoader());//这是为了更高级的用途
拆封
编组
有关更多详细信息,请参阅Javadocs和JAXB规范