Class 和 xml 之间的相互转化

来源:互联网 发布:灵魂相认知乎 编辑:程序博客网 时间:2024/04/30 17:08

使用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();    }}


结果显示:



0 0
原创粉丝点击