我有一个用于配置一些规则的XML,它没有复杂的结构,但这个配置在我的系统中的任何地方都可以使用,所以我想把这个XML解析成java对象,并设计成单子模式,有什么好办法可以让我用它来直接解读XML到Java对象,而不用写很多代码?
我在Google上做了一些研究,知道JAXB是一个选择,我的应用只是一些工具程序,读取规则,然后跟随做一些事情,JAXB可以更广泛地用于网络服务,它适合我的项目吗?
如果是的话,最重要的问题是,我用xjc根据xsd文件生成java对象源类,解密后我将直接得到这些configurationType对象,是否需要我再次转换,(从JaxB类到我自己的java pojo对象配置),我看到大多数编码员都这样做,但为什么? 因为它们是一些数据,只是从对象生成到JAXB并复制到我们自己创建的POJO对象上
JAXB是一个理想的解决方案。但你不一定需要xsd和xjc来实现。更多时候,你没有xsd,但你知道你的xml是什么。简单地分析你的xml,例如、
<customer id="100">
<age>29</age>
<name>mkyong</name>
</customer>
创建必要的模型类:
@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"));
检查结果,修复bug!
用于使用JAXB执行Unmarshall:
将给定的XML转换为XSD(由你自己或由在线转换器)、
在eclipse中创建一个JAXB项目、
创建XSD文件并将转换后的XSD内容粘贴到其中、
右键点击**XSD文件--> 生成--> JAXB类-->按照指示操作(这将在src中创建所有必要的.java文件,即一个package-info,对象工厂和pojo类)、
在src中创建另一个.java文件来操作unmarshall操作,并运行它。
愉快的编码!!
JAXB是一个可靠的选择,因为它能顺利地将xml映射到java类。但是还有其他的框架可用,这里就是这样一个框架: