• (转载)XML解析之-XStream解析


    转载来源:http://hwy584624785.iteye.com/blog/1168680

    本例使用XStream生成一个xml文件,再发序列化xml文件内容。

    XStream是一个简单的类库,可以序列化对象到xml,还可以将xml还原为对象。 
    XStream官网:http://xstream.codehaus.org/ 
    附件提供XStream和xpp3相关的jar下载: 
    xstream-1.2.2.jar 
    xpp3-1.1.3.3_min.jar 
    为了使用XStream,需要对其初始化,初始化方法有两种: 

    • XStream xstream = new XStream();   这种方式的初始化需要xpp3-[version].jar的支持。xpp是一个快速解析XML文件的解析器。
    • XStream xstream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver("utf-8"))      这种方式不需要依赖XPP3.jar的支持,它是使用标准的JAXP DOM来解析它。

    同时这里对mode参数做个简单的说明: 
    在XStream序列化或反序列化对象时,它会创建两个类MarshallingContext和UnmarshallingContext,由它们来处理数据,以及委派合适的转换器。XStream提供了三对上下文的缺省实现,它们之间有着细微的差别。缺省值可以通过方法XStream.setMode()来改变,需要传递下面参数中的一个: 

    • XStream.XPATH_RELATIVE_REFERENCES:(缺省)通过XPath引用来标识重复的引用,使用相对路径表示。
    • XStream.XPATH_ABSOLUTE_REFERENCES:通过XPath引用来标识重复的引用,使用绝对路径表示。
    • XStream.ID_REFERENCES:使用ID引用来标识重复的引用。在一些场合(手写XML时),将会更易于操作
    • XStream.NO_REFERENCES:这种情况将失去对图形对象的支持,仅把对象看作为树型结构。重复的引用被视作两个不同的对象,循环引用会导致异常产生。相对于上面两种模式,这种模式速度会更快,占用内存会更
    这个例子包含有3个简单的java类,其中两个是javabean,另外一个是逻辑处理类。
    两个javabean类如下:
    Person.java
    Java代码  收藏代码
    1. public class Person {  
    2.     private int id;  
    3.     private String name;  
    4.     private int age;  
    5.     private PhoneNumber phone;  
    6.     public int getId() {  
    7.         return id;  
    8.     }  
    9.     public void setId(int id) {  
    10.         this.id = id;  
    11.     }  
    12.     public String getName() {  
    13.         return name;  
    14.     }  
    15.     public void setName(String name) {  
    16.         this.name = name;  
    17.     }  
    18.     public int getAge() {  
    19.         return age;  
    20.     }  
    21.     public void setAge(int age) {  
    22.         this.age = age;  
    23.     }  
    24.     public PhoneNumber getPhone() {  
    25.         return phone;  
    26.     }  
    27.     public void setPhone(PhoneNumber phone) {  
    28.         this.phone = phone;  
    29.     }  
    30.     @Override  
    31.     public String toString() {  
    32.         return "Person [id=" + id + ", name=" + name + ", age=" + age  
    33.                 + ", phone=" + phone + "]";  
    34.     }  
    35. }  
     PhoneNumber.java
    Java代码  收藏代码
    1. public class PhoneNumber {    
    2.     private int code;    
    3.     private String number;  
    4.     public int getCode() {  
    5.         return code;  
    6.     }  
    7.     public void setCode(int code) {  
    8.         this.code = code;  
    9.     }  
    10.     public String getNumber() {  
    11.         return number;  
    12.     }  
    13.     public void setNumber(String number) {  
    14.         this.number = number;  
    15.     }  
    16.     @Override  
    17.     public String toString() {  
    18.         return "PhoneNumber [code=" + code + ", number=" + number + "]";  
    19.     }    
    20. }    
     
    实现功能最主要是下面这个类了:
    XStreamTest.java
    Java代码  收藏代码
    1. import java.io.File;  
    2. import java.io.FileInputStream;  
    3. import java.io.FileOutputStream;  
    4.   
    5. import com.thoughtworks.xstream.XStream;  
    6.   
    7. public class XStreamTest {  
    8.     public static void main(String[] args) throws Exception {  
    9.         Person person = initPerson();  
    10.         XStream xStream = new XStream();  
    11.         xStream.alias("person", Person.class);  
    12.         FileOutputStream fileOutputStream=new FileOutputStream(new File("test.xml"));    
    13.         xStream.toXML(person,fileOutputStream);    
    14.           
    15.         //反序列化  
    16.         FileInputStream fileInputStream=new FileInputStream(new File("test.xml"));    
    17.         Person person1=(Person)xStream.fromXML(fileInputStream);    
    18.         System.out.println(person1.toString());    
    19.     }  
    20.       
    21.     public static Person initPerson(){  
    22.         Person person = new Person();  
    23.         person.setId(20);  
    24.         person.setName("huangwei");  
    25.         person.setAge(24);  
    26.           
    27.         PhoneNumber phoneNumber = new PhoneNumber();  
    28.         phoneNumber.setCode(222);  
    29.         phoneNumber.setNumber("15200000000");  
    30.         person.setPhone(phoneNumber);  
    31.           
    32.         return person;  
    33.     }  
    34. }  
     
    打印生成的xml文件内容如下:
    Xml代码  收藏代码
    1. <person>  
    2.   <id>20</id>  
    3.   <name>huangwei</name>  
    4.   <age>24</age>  
    5.   <phone>  
    6.     <code>222</code>  
    7.     <number>15200000000</number>  
    8.   </phone>  
    9. </person>  
     
    反序列化解过如下:
    Java代码  收藏代码
    1. Person [id=20, name=huangwei, age=24, phone=PhoneNumber [code=222, number=15200000000]]  
  • 相关阅读:
    关于SQLite
    Solr开发文档
    Using Fiddler with IIS
    SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison
    Git资料
    VS2010版快捷键
    IE9子iframe父iframe cookie设置诡异问题
    美国的企业家宣言
    互联网程序编写原则
    分析牛人js版删除代码注释(状态机机制)
  • 原文地址:https://www.cnblogs.com/BlogCommunicator/p/4872915.html
Copyright © 2020-2023  润新知