将XML解析/反序列化为JavaObjects

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

我创建了一个xsd:

http://pastebin.com/n1pwjRGX

和一个示例XML文件:

                    

哪个应该使用xsd等。

那么我怎样才能将这些XML的反序列化转化为一个漂亮的Java对象结构呢?

Mabe喜欢:

 class HDB { private HashMap map; } class Country { private List list; // or two Lists with  and  private List regions; } class Region{ private List list; // or two Lists with  and  } 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的初学者),由于地图不能像v一样写,因此难以实现这种XML结构。

使用

 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 Unmarshalling

  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编组和解组

JAXB – Java到XML绑定,是如上所述的指向,有效和高效的XML到POJO的方法,反之亦然。

加上必需的工具与JDK捆绑在一起只要求创建对象绑定所需的无错XSD / XSD集。

XJC

xjc:使用命令行args作为-p用于包名-d用于out dir等。详细信息可以在xjc手册页/参考在线页面找到 。

但是如果实现涉及多个xsds,那么更喜欢使用xjb(绑定文件)

                

来自oracle的XJBs 指南综合指南

一旦生成了绑定,您只需创建JAXBContext ,其中包含的类或包列表分隔为:

 final JAXBContext context = JAXBContext.newInstance(Generated.class); final JAXBContext contextOnPackage = JAXBContext.newInstance("com.alpha.generated:com.beta.generated"); 

您可以选择提供类加载器以及最终的JAXBContext contextCustomClassLoader = JAXBContext.newInstnace(“..:..”,X.class.getClassLoader()); //这是为了更高级的用途。

解组

 // source can be a file/InputStream/InputSource etc. Test obj = (Test)context.createUnMarshaller().unmarshal(source); 

编组

 Test test = gen.xml.package.ObjectFactory.createTest(); // Bunch of setters // gen.xml.package is generated package XJC will create ObjectFactory as well // sink can be File/OutputStream/Writer etc. context.createMarshaller().marshal(test, sink); 

有关更多详细信息,请参阅Javadocs和JAXB规范。