用Java读取XML文件

Kli*_*Max 4 java xml jaxb

我有一个大的XML文件和几个POJO clasess需要读取这个XML.当我尝试用一​​个POJO读取测试文件时我使用这个:

    JAXBContext jaxbContext = JAXBContext.newInstance(Test.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Test ts = (Test)jaxbUnmarshaller.unmarshal(file);
System.out.println(ts.getName());
Run Code Online (Sandbox Code Playgroud)

但是当我有30个POJO时,我会做什么?创建这4行30次?给我建议.

UPDATE

我如何理解这个例子http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html 使用几个POGO我将使用

JAXBContext.newInstance("message:customer:product:order");
Run Code Online (Sandbox Code Playgroud)

在这个考试中,autor有3个咒语,但只有两个有an @XmlRootElement注释.为什么?

Ale*_*kov 6

您可以使用所有30个POJO创建JAXBContext.您还可以将它们的名称存储在包中的jaxb.in​​dex索引文件中,并创建JAXBContext.newInstance("your.package")

以下是javadoc中 jaxb.in​​dex的一些细节

除了在上下文路径中列出之外,程序员带注释的JAXB映射类可以在jaxb.in​​dex资源文件中列出,格式如下所述.请注意,java包可以包含模式派生类和用户注释的JAXB类.此外,java包可能包含必须处理的JAXB包注释.(参见JLS第3版,第7.4.1节"包注释").

您的类应使用@XmlRootElement或@XmlType注释进行注释.

您还可以使用scannotation框架找到所有注释为@XmlRootElement的类,并使用您拥有的所有JAXB POJO创建JAXBContext.

如果您有任何问题,请发表评论,我会更新答案.希望能帮助到你.