gpt4 book ai didi

java - 将 XML 解析/反序列化为 JavaObjects

转载 作者:数据小太阳 更新时间:2023-10-29 02:18:37 26 4
gpt4 key购买 nike

我开始了一个新的小项目,我想从 XML 中反序列化对象。

我创建了一个 xsd:

http://pastebin.com/n1pwjRGX

和一个示例 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 结构,因为映射不能像这样写v.

最佳答案

使用

xjc your_xsd_name -p packagename 

生成Pojos,xjc是jdk自带的xml java编译器。

生成类后,按如下方式使用 jaxb

JAXB 编码

    HDB hdb = new HDB(); 
JAXBContext jaxbContext = JAXBContext.newInstance(HDB.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.marshal(hdb, file);
jaxbMarshaller.marshal(hdb, System.out);

JAXB 解码

    File file = new File("your xml file");
JAXBContext jaxbContext = JAXBContext.newInstance(hdb.class);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
HDB hdb = (HDB) jaxbUnmarshaller.unmarshal(file);
System.out.println(hdb);

访问以下链接了解更多信息 JAXB marshalling and unmarshalling

关于java - 将 XML 解析/反序列化为 JavaObjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com