zoukankan      html  css  js  c++  java
  • Xstream之常用方式与常用注解

    示例代码 

    Java代码  收藏代码
    1. Blog teamBlog = new Blog(new Author("Guilherme Silveira"));  
    2. teamBlog.add(new Entry("first","My first blog entry."));  
    3. eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));  
    4. XStream xstream = new XStream();  
    5.  System.out.println(xstream.toXML(teamBlog));  


    打印结果为: 

    Java代码  收藏代码
    1.  <xtream.Blog>  
    2.   <writer>  
    3.     <name>Guilherme Silveira</name>  
    4.   </writer>  
    5.   <entries>  
    6.     <xtream.Entry>  
    7.       <title>first</title>  
    8.       <description>My first blog entry.</description>  
    9.     </xtream.Entry>  
    10.     <xtream.Entry>  
    11.       <title>tutorial</title>  
    12.       <description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>  
    13.     </xtream.Entry>  
    14.   </entries>  
    15. </xtream.Blog>  


    以上节点就包含了包名,如包名很长,就很难看了,怎样才能重新命名这个节点呀! 
    以下的1,2设置效果一样 

    Java代码  收藏代码
    1. //xstream.aliasPackage("", "xtream");  
    2. 2 xstream.alias("blog", Blog.class);  
    3. 3 xstream.alias("entry", Entry.class);  

      
    通过这样设置就完成了节点名称的设置.如下: 

    Java代码  收藏代码
    1. <blog>  
    2.   <writer>  
    3.     <name>Guilherme Silveira</name>  
    4.   </writer>  
    5.   <entries>  
    6.     <entry>  
    7.       <title>first</title>  
    8.       <description>My first blog entry.</description>  
    9.     </entry>  
    10.     <entry>  
    11.       <title>tutorial</title>  
    12.       <description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>  
    13.     </entry>  
    14.   </entries>  
    15. </blog>  


    修改子节点属性名称 
    将writer属性名称修改为:autor 

    Java代码  收藏代码
    1. xstream.aliasField("author", Blog.class, "writer");  


    输出如下: 

    Java代码  收藏代码
    1. <blog>  
    2.   <author>  
    3.     <name>Guilherme Silveira</name>  
    4.   </author>  
    5.   <entries>  
    6.     <entry>  
    7.       <title>first</title>  
    8.       <description>My first blog entry.</description>  
    9.     </entry>  
    10.     <entry>  
    11.       <title>tutorial</title>  
    12.       <description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>  
    13.     </entry>  
    14.   </entries>  
    15. </blog>  


    删除集合节点名称的设置 

    Java代码  收藏代码
    1. xstream.addImplicitCollection(Blog.class, "entries");  


    输出如下: 

    Java代码  收藏代码
    1.  <blog>  
    2.   <author>  
    3.     <name>Guilherme Silveira</name>  
    4.   </author>  
    5.   <entry>  
    6.     <title>first</title>  
    7.     <description>My first blog entry.</description>  
    8.   </entry>  
    9.   <entry>  
    10.     <title>tutorial</title>  
    11.     <description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>  
    12.   </entry>  
    13. </blog>  


    将Blog类的元素设置为:它的节点属性 
    //使用这个属性名作为节点上的元素 

    Java代码  收藏代码
    1. xstream.useAttributeFor(Blog.class, "writer");  


    //重新命名 

    Java代码  收藏代码
    1. xstream.aliasField("author", Blog.class, "writer");  


    //注册转换器 

    Java代码  收藏代码
    1. xstream.registerConverter(new AuthorConverter());  


    转换器: 

    Java代码  收藏代码
    1. import com.thoughtworks.xstream.converters.SingleValueConverter;  
    2. class AuthorConverter implements SingleValueConverter {  
    3.     //显示节点属性值  
    4.     public String toString(Object obj) {  
    5.         return ((Author) obj).getName();  
    6.     }  
    7.   
    8.     public Object fromString(String name) {  
    9.         return new Author(name);  
    10.     }  
    11.   
    12.     public boolean canConvert(Class type) {  
    13.         return type.equals(Author.class);  
    14.     }  
    15. }  


    显示结果: 

    Java代码  收藏代码
    1. <blog author="Guilherme Silveira">  
    2.   <entry>  
    3.     <title>first</title>  
    4.     <description>My first blog entry.</description>  
    5.   </entry>  
    6.   <entry>  
    7.     <title>tutorial</title>  
    8.     <description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>  
    9.   </entry>  
    10. </blog>  


    注解的使用方式,使用之前必须加上注解类才有作用: 

    Java代码  收藏代码
    1. XStream xstream = new XStream();  
    2. xstream.processAnnotations(Blog.class);  
    3. xstream.processAnnotations(Entry.class);  


    1  @XStreamAlias注解可在类与属性上使用设置名称,相当于: xstream.alias("blog", Blog.class); 

    Java代码  收藏代码
    1. @XStreamAlias("blog")  
    2. public class Blog {   
    3.       
    4.     @XStreamAlias("author")  
    5.         private Author writer;  
    6.   
    7.     .....  
    8. }  


    当然Entry类也要设置同样的类属性:@XStreamAlias("entity") 
    2 @XStreamImplicit去集合节点名:相当于 xstream.addImplicitCollection(Blog.class, "entries"); 
    3 @XStreamConverter(AuthorConverter.class),参见以上的转换器类相当于: 

    Java代码  收藏代码
    1. xstream.useAttributeFor(Blog.class, "writer");  
    2. //重新命名  
    3. xstream.aliasField("author", Blog.class, "writer");  
    4. //注册转换器  
    5. xstream.registerConverter(new AuthorConverter());  


    要使用这个注解AuthorConverter必须符合二个条件 
    a 必须要有个默认的无参构造函数 

    Java代码  收藏代码
    1. public AuthorConverter() {  
    2.           
    3. }  


    b 类声明必须为:public 

    Java代码  收藏代码
    1. public class AuthorConverter implements SingleValueConverter {  
    2.  ...  
    3. }  


    不用注解这二点都可以不强制要求! 
    完整代码如下: 

    Java代码  收藏代码
      1. import com.thoughtworks.xstream.XStream;  
      2. import com.thoughtworks.xstream.annotations.XStreamAlias;  
      3. import com.thoughtworks.xstream.annotations.XStreamAsAttribute;  
      4. import com.thoughtworks.xstream.annotations.XStreamConverter;  
      5. import com.thoughtworks.xstream.annotations.XStreamImplicit;  
      6. @XStreamAlias("blog")  
      7. public class Blog {  
      8.   
      9.     @XStreamAsAttribute  
      10.     @XStreamAlias("author")  
      11.     @XStreamConverter(AuthorConverter.class)  
      12.     private Author writer;  
      13.   
      14.     @XStreamImplicit  
      15.     private List entries = new ArrayList();  
      16.   
      17.     public Blog(Author writer) {  
      18.         this.writer = writer;  
      19.     }  
      20.   
      21.     public void add(Entry entry) {  
      22.         entries.add(entry);  
      23.     }  
      24.   
      25.     public List getContent() {  
      26.         return entries;  
      27.     }  
      28.   
      29.     public static void main(String[] args) {  
      30.   
      31.         Blog teamBlog = new Blog(new Author("Guilherme Silveira"));  
      32.         teamBlog.add(new Entry("first", "My first blog entry."));  
      33.         teamBlog  
      34.                 .add(new Entry("tutorial",  
      35.                         "Today we have developed a nice alias tutorial. Tell your friends! NOW!"));  
      36.         XStream xstream = new XStream();  
      37.         xstream.processAnnotations(Blog.class);  
      38.         xstream.processAnnotations(Entry.class);  
      39.         // 重新命名节点名  
      40.         // xstream.aliasPackage("", "xtream");  
      41.         /* 
      42.          * xstream.alias("blog", Blog.class); xstream.alias("entry", 
      43.          * Entry.class); //重新命名属性名 // xstream.aliasField("author", Blog.class, 
      44.          * "writer"); //去节点 xstream.addImplicitCollection(Blog.class, 
      45.          * "entries"); // xstream.useAttributeFor(Blog.class, "writer"); // 
      46.          * xstream.aliasField("author", Blog.class, "writer"); // 
      47.          * xstream.addImplicitCollection(Blog.class, "entries"); 
      48.          * //使用这个属性名作为节点上的元素 xstream.useAttributeFor(Blog.class, "writer"); 
      49.          * //重新命名 xstream.aliasField("author", Blog.class, "writer"); //注册转换器 
      50.          * xstream.registerConverter(new AuthorConverter()); 
      51.          */  
      52.         System.out.println(xstream.toXML(teamBlog));  
      53.     }  
      54.   
      55. }  
  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/jiligalaer/p/4272133.html
Copyright © 2011-2022 走看看