我有一个XML用于配置一些规则,它没有复杂的结构,但是这个配置在我的系统中的任何地方使用,所以我想将这个XML解析为java对象并设计为单例模式,这是我的好方法可以使用它直接解析XML到Java对象而无需编写太多代码?
我做了一些关于谷歌的研究,知道JAXB是一个选择,我的应用程序只是一些工具程序,它读取规则,然后按照做的东西,JAXB可以更广泛地用于Web服务,它适合我的项目?
如果是的话,最重要的问题是,我用xjc根据xsd文件生成java对象的源类,解组之后我会直接得到这些configurationType对象,是否有必要再次转换,(从JaxB类到我拥有的java pojo对象)配置),我看到大多数编码器做到了这一点,但为什么呢?因为它们是一些数据,只是从生成的对象到JAXB并复制到自己创建的POJO对象
Evg*_*eev 59
JAXB是一种理想的解决方案.但是你不一定需要xsd和xjc.通常你没有xsd,但你知道你的xml是什么.只需分析您的xml,例如,
<customer id="100">
<age>29</age>
<name>mkyong</name>
</customer>
Run Code Online (Sandbox Code Playgroud)
创建必要的模型类:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
尝试解组:
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new File("C:\\file.xml"));
Run Code Online (Sandbox Code Playgroud)
检查结果,修复错误!
考虑到您有一个XML文件,有一点非常重要:
<customer id="100">
<Age>29</Age>
<NAME>mkyong</NAME>
</customer>
Run Code Online (Sandbox Code Playgroud)
很抱歉通知您,但是:
@XmlElement
public void setAge(int age) {
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
不会帮助你,因为它试图从XML中寻找"age"而不是"Age"元素名称.
我建议您手动指定与XML文件中的元素名称匹配的元素名称:
@XmlElement(name="Age")
public void setAge(int age) {
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
如果你有例如:
@XmlRootElement
@XmlAccessorType (XmlAccessType.FIELD)
public class Customer {
...
Run Code Online (Sandbox Code Playgroud)
这意味着默认情况下它将使用java bean,此时如果指定您不能设置另一个
Run Code Online (Sandbox Code Playgroud)@XmlElement(name="NAME")
对于元素的setter方法上面的注释,<NAME>..</NAME>
它将失败,表示在一个单独的变量上不能有两个元素.
我希望它有所帮助.
使用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操作,然后运行它.
快乐编码 !!
归档时间: |
|
查看次数: |
133113 次 |
最近记录: |