如何解析xml到java对象?

我有一个XML用于配置一些规则,它没有复杂的结构,但是这个配置在我的系统中的任何地方使用,所以我想将这个XML解析为java对象并设计为单例模式,这是我的好方法可以使用它直接解析XML到Java对象而无需编写太多代码?

我做了一些关于谷歌的研究,知道JAXB是一个选择,我的应用程序只是一些工具程序,它读取规则,然后按照做的东西,JAXB可以更广泛地用于Web服务,它适合我的项目?

如果是的话,最重要的问题是,我用xjc根据xsd文件生成java对象的源类,在unmarshal之后我会直接得到这些configurationType对象,是否有必要再次转换,(从JaxB类到我拥有的java pojo对象)配置),我看到大多数编码器做到了这一点,但为什么呢? 因为它们是一些数据,只是从生成的对象到JAXB并复制到自己创建的POJO对象

JAXB是一种理想的解决方案。 但是你不一定需要xsd和xjc。 通常你没有xsd,但你知道你的xml是什么。 只需分析您的xml,例如,

 29 mkyong  

创建必要的模型类:

 @XmlRootElement public class Customer { String name; int age; int id; public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public int getId() { return id; } @XmlAttribute public void setId(int id) { this.id = id; } } 

尝试解组:

 JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new File("C:\\file.xml")); 

检查结果,修复错误!

使用JAXB执行Unmarshall:

1)将给定的XML转换为XSD(由您自己或在线转换器),

2)在eclipse中创建一个JAXB项目,

3)创建XSD文件并将转换后的XSD内容粘贴到其中,

4)右键单击** XSD文件 – >生成 – > JAXB类 – >按照说明操作(这将在src中创建所有nessasary .java文件,即一个package-info,object factory和pojo类),

5)在src中创建另一个.java文件来操作unmarshall操作,然后运行它。

快乐编码 !!

考虑到您有一个XML文件,有一点非常重要:

  29 mkyong  

很抱歉通知您,但是:

 @XmlElement public void setAge(int age) { this.age = age; } 

不会帮助你,因为它试图从XML中寻找“age”而不是“Age”元素名称。

我建议您手动指定与XML文件中的元素名称匹配的元素名称:

 @XmlElement(name="Age") public void setAge(int age) { this.age = age; } 

如果你有例如:

 @XmlRootElement @XmlAccessorType (XmlAccessType.FIELD) public class Customer { ... 

这意味着默认情况下它将使用java bean,此时如果指定不能设置另一个bean

 @XmlElement(name="NAME") 

对于元素..的setter方法上面的注释,它将失败,说一个变量上不能有两个元素。

我希望它有所帮助。

JAXB是一个可靠的选择,因为它可以平滑地映射xml到java类。 但是还有其他框架可用,这里有一个这样的框架:

https://code.google.com/p/xmappr/

我发现jackson fasterxml是使用XML serializing/deserializing bean的一个不错的选择。

请参阅: 如何使用spring来编组和解组xml?