在开发中有时候需要将xml文件解析为一个对象,方便在程序书写时获取相关的值或属性,有时需要将对象翻译成一个xml格式的内容,比如发报时,或内容传输时用xml格式是比较方便的,那如何将二者之间转化呢?不多说了,直接看代码:
/**
* 将xml字符串转化为对象
*
* @param xmlString xml字符串
* @param className 对象的class名称
* @return 转化成的对象
*/
public Object xmlStringTObject(String xmlString, String className) {
// 创建一个读取xml文件的流
StringReader xmlReader = new StringReader(xmlString);
// 创建一个BeanReader实例,相当于转化器
BeanReader beanReader = new BeanReader();
// 注册要转换对象的类,并指定根节点名称
Class clazz = null;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
beanReader.registerBeanClass(clazz);
} catch (IntrospectionException e) {
e.printStackTrace();
}
// 将XML解析Java Object
Object obj = null;
try {
obj = beanReader.parse(xmlReader);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
return obj;
}
/**
* 将对象转换为xml字符串
* @param object 需要被转化的对象
* @return
*/
public String ObjectTXmlString(Object object) {
String xmlString = null;
// 创建一个输出流,将用来输出Java转换的XML文件
StringWriter outputWriter = new StringWriter();
// 输出XML的文件头
outputWriter.write("<?xml version='1.0' encoding='ISO8859-1'?>\n");
// 创建一个BeanWriter实例,并将BeanWriter的输出重定向到指定的输出流
BeanWriter beanWriter = new BeanWriter(outputWriter);
// 配置BeanWriter对象
beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
beanWriter.getBindingConfiguration().setMapIDs(false);
beanWriter.setWriteEmptyElements(false);
try {
beanWriter.write(object);
} catch (Exception e) {
e.printStackTrace();
}
xmlString = outputWriter.toString();
// 关闭输出流
try {
outputWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
return xmlString;
}