使用dom4J 演示 Xml 和类 之间的相互转化
使用maven:pom.xml 如下:
<!-- start junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- start XML -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>20040902.021138</version>
</dependency>
Student 类如下
/**
* Created with IntelliJ IDEA.
* User: Alvin
* Date: 14-8-1
* Time: 下午4:13
* To change this template use File | Settings | File Templates.
*/
public class Student {
private int num;
private String name;
private int age;
private String email;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
student.xml 内容如下
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<xml>
<num>2111212049</num>
<name><![CDATA[alvin]]></name>
<age>25</age>
<email><![CDATA[alvalp@live.com]]></email>
</xml>
XmlUtil 类 用来处理 bean2Xml 和xml2Bean
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import com.thoughtworks.xstream.io.xml.XppDriver;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.Writer;
/**
* Created with IntelliJ IDEA.
* User: Alvin
* Date: 14-8-1
* Time: 下午4:31
* To change this template use File | Settings | File Templates.
*/
public class XmlUtil {
private static XmlUtil xmlUtil = new XmlUtil();
private static SAXReader saxReader;
private static Document document;
private static XStream xStream = new XStream(
new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标记
@SuppressWarnings("rawtypes")
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (!text.matches("^[0-9]+$")) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
}
);
private XmlUtil() {} ;
public static XmlUtil getInstance() {
return xmlUtil;
}
@SuppressWarnings("static-access")
public void setFile(String filename) {
this.saxReader = new SAXReader();
try {
System.out.println(filename);
this.document = this.saxReader.read(filename);
} catch (DocumentException e) {
e.printStackTrace();
}
}
public String getContentByNodeName(String nodeName) {
Element element = (Element) this.document.selectSingleNode("//" + nodeName);
return element.getText();
}
public Object xml2Bean(String xml, Class beanClass) {
XStream xStream = new XStream(new StaxDriver());
xStream.alias("xml", beanClass);
return xStream.fromXML(xml);
}
public String bean2Xml(Object obj, String str) {
this.xStream.alias(str, obj.getClass());
return this.xStream.toXML(obj);
}
}
测试类
import message.req.ReqTextMessage;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
/**
* Created with IntelliJ IDEA.
* User: Alvin
* Date: 14-8-3
* Time: 下午1:08
* To change this template use File | Settings | File Templates.
*/
public class XmlUtilTest {
private XmlUtil xmlUtil ;
@Before
public void get(){
this.xmlUtil = XmlUtil.getInstance();
}
@Test
public void Bean2XMl(){
Student student = new Student();
student.setAge(25);
student.setEmail("alvalp@live.com");
student.setNum(2111212049);
student.setName("alvin");
String xml = xmlUtil.bean2Xml(student,"xml");
System.out.println("*************** bean To XML **************");
System.out.println(xml);
}
@Test
public void xml2Bean() throws IOException {
String filename ="student.xml";
String xml = getXml(filename);
Student student = (Student) xmlUtil.xml2Bean(xml,Student.class);
System.out.println("************* XML To Bean ***********");
System.out.print("ST: Name: "+student.getName());
}
public String getXml(String filename) throws IOException {
StringBuffer xml = new StringBuffer();
FileReader in = new FileReader(filename);
BufferedReader reader = new BufferedReader(in);
String line = null;
while((line = reader.readLine()) != null){
xml.append(line);
}
return xml.toString();
}
}
结果显示: