Class 和 xml 之间的相互转化

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


}


结果显示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值