之前解析xml一直用demo4j,再后来发现XStream也很好用,XStream能方便的解析xml,也能方便的吧xml元素转换为java对象。这一阵因为项目需求需要用JAXB,也就研究一下。
个人觉得JAXB挺方便一点是不需要引用第三方包,JDK1.6以及以后版本自带这些库,直接调用即可。
JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。
核心类:
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
用法也很简单:
粘一个项目中我写的Java对象序列化为XML数据例子:
/**
* 生成xml文件
*
* @param filePath
* 要生成的路径
* @param fileName
* 要生成的文件名
* @param obj
* bean对象
*/
public static void toXml(String filePath, String fileName, Object obj) {
// TODO 自动生成的方法存根
String path = filePath + fileName;
File file = new File(path);
try {
JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(obj, file);
// marshaller.marshal(obj, System.out);
} catch (JAXBException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
再贴一个将XML数据反序列化为Java对象例子:
/**
* 由xml文件生成java对象
*
* @param filePath
* 文件路径
* @param fileName
* 文件名字
* @param obj
* @return
*/
public static Object toBean(String filePath, String fileName, Object obj) {
// TODO 自动生成的方法存根
String path = filePath + fileName;
if (path != null) {
File file = new File(path);
try {
JAXBContext jaxbContext = JAXBContext.newInstance(obj
.getClass());
Unmarshaller umUnmarshaller = jaxbContext.createUnmarshaller();
String text = FileUtilities.fetchFileContent(file, "UTF-8");
obj = umUnmarshaller.unmarshal(new StringReader(text));
return obj;
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
return null;
}
} else {
return null;
}
}