Xstream之經常使用方式與經常使用註解

參考資料 
1 xStream框架完美實現Java對象和xml文檔JSON、XML相互轉換 
http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html 
2 xStream完美轉換XML、JSON 
http://archive.cnblogs.com/a/2025197/ 
官網:http://xstream.codehaus.org/download.html 
相關jar包可在: 
XStream之初識 
http://liuzidong.iteye.com/blog/1059453下載 
示例代碼 
html

Java代碼  收藏代碼框架

  1. Blog teamBlog = new Blog(new Author("Guilherme Silveira"));  函數

  2. teamBlog.add(new Entry("first","My first blog entry."));  ui

  3. eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));  this

  4. XStream xstream = new XStream();  spa

  5.  System.out.println(xstream.toXML(teamBlog));  code


打印結果爲: 
xml

Java代碼  收藏代碼htm

  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. 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") 
@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必須符合二個條件 
必需要有個默認的無參構造函數 

Java代碼  收藏代碼

  1. public AuthorConverter() {  

  2.           

  3. }  


類聲明必須爲: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. }

相關文章
相關標籤/搜索