qiyadeng

          專(zhuān)注于Java示例及教程
          posts - 84, comments - 152, trackbacks - 0, articles - 34

          XStream兩分鐘教程(譯)

          Posted on 2007-05-08 18:14 qiyadeng 閱讀(23284) 評(píng)論(8)  編輯  收藏

           兩分鐘教程

            這是一個(gè)關(guān)于XStream快速的介紹。快速瀏覽一下你會(huì)馬上知道把一個(gè)對(duì)象轉(zhuǎn)換到XML或是轉(zhuǎn)換回來(lái)是多么的簡(jiǎn)單。你肯定會(huì)碰到下面的問(wèn)題。

           

          創(chuàng)建能夠序列化的類(lèi)

            這是一組簡(jiǎn)單的類(lèi)。XStream能把這些類(lèi)的實(shí)例轉(zhuǎn)換到XML或是轉(zhuǎn)換回來(lái)。

           

          public class Person { 

           
          private String firstName;
           
          private String lastName;
           
          private PhoneNumber phonex;
           
          private PhoneNumber fax;
          //構(gòu)造函數(shù)或是其他方法 


          public class PhoneNumber { 

           
          private int code;
           
          private int number; 

          //構(gòu)造函數(shù)或是其他方法
          }

           

            :注意到這些都是私有變量。XStream不關(guān)心變量的作用域。不需要getter或是setter方法。并且,XStream不限定需要默認(rèn)的構(gòu)造函數(shù)。

           

          實(shí)例化XStream

          使用XStream,簡(jiǎn)單實(shí)例化XStream類(lèi):

           

          XStream xStream = new XStream(); 

           

           你需要xstream-[version].jar and xpp3-[version].jar在classpath中。XPP3是一個(gè)非常快的XML拉式轉(zhuǎn)換器工具。如果你不想包含這個(gè)依賴(lài),你可以使用標(biāo)準(zhǔn)的JAXP DOM轉(zhuǎn)換器來(lái)代替。

           

          XStream xStream = new XStream(new DomDriver());//不需要XPP3庫(kù) 


          :這個(gè)類(lèi)的簡(jiǎn)單設(shè)計(jì)是為了實(shí)現(xiàn)通用操作的。為了實(shí)現(xiàn)更復(fù)雜的操作你可以選擇自己創(chuàng)建出不同方式。

           

          現(xiàn)在,為了使用XStream來(lái)更精簡(jiǎn)的輸出XML,你可以為自定義的類(lèi)創(chuàng)建別名到XML的元素名的映射。這是使用XStream唯一需要的映射的,甚至這個(gè)都是可選的。

           

          xStream.alians("person",Person.class); 

           

          :這是可選的一步。沒(méi)有這步XStream也可以很好的起作用,但是XML元素的名字就會(huì)包含每個(gè)類(lèi)的全稱(chēng)(包括包名),這將會(huì)使生成XML稍大。

           

          序列號(hào)一個(gè)對(duì)象到XML

           讓我們創(chuàng)建一個(gè)Person的實(shí)例并且填充它的變量域:

           

          Person joe = new Person("Joe","Walnes"); 

          joe.setPhone(
          new PhoneNumber(123,"1234-456")); 

          joe.setFax(
          new PhoneNumber(123,"9999-999")); 

           

          現(xiàn)在轉(zhuǎn)換到XML,你要做的是簡(jiǎn)單的調(diào)用XStream:
           

          String xml = xstream.toXML(joe); 

          生成的XML看上去像這樣:

           

          <person>
            
          <firstname>Joe</firstname>
            
          <lastname>Walnes</lastname>
            
          <phone>
              
          <code>123</code>
              
          <number>1234-456</number>
            
          </phone>
            
          <fax>
              
          <code>123</code>
              
          <number>9999-999</number>
            
          </fax>
          </person> 

           

          非常簡(jiǎn)單,像創(chuàng)建XML一樣。

           

          從XML反序列化一個(gè)對(duì)象

           

          從XML重新構(gòu)造一個(gè)對(duì)象:
           

          Person newJoe = (Person)xStream.fromXML(xml); 


          XStream是多么的簡(jiǎn)單啊!

           

          總結(jié):

           

          使用xStream.alias(String elementName, Class cls)為任何一個(gè)自定義類(lèi)創(chuàng)建到類(lèi)到元素的別名;

          使用xStream.toXML(Object obj)轉(zhuǎn)換對(duì)象到XML;

          使用xStream.fromXML(String xml)轉(zhuǎn)換XML到對(duì)象;

          (附原文地址:http://xstream.codehaus.org/tutorial.html)

          Feedback

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2007-05-08 23:22 by yeshucheng
          只是在String中來(lái)回轉(zhuǎn)換,如果要生成一個(gè)xml文件或者從一個(gè)xml讀取呢

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2007-05-09 09:44 by qiyadeng
          讀:
          Reader reader = new FileReader(persistFile);
          Object object = (Object)xStream.fromXML(reader);
          寫(xiě):
          FileWriter writer = new FileWriter(persistFile);
          xStream.toXML(object,writer);

          # re: XStream兩分鐘教程(譯)[未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-12-06 16:54 by x
          寫(xiě)的時(shí)候是亂碼

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2007-12-06 17:55 by qiyadeng
          用的什么編碼?

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2008-01-06 23:24 by sitinspring
          確實(shí)不錯(cuò),值得研究一下。

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2008-12-25 17:12 by Lirf
          xstream生成的xml怎么是這樣的:
          <person>
          <firstname>Joe</firstname>
          <lastname>Walnes</lastname>
          <phone>
          <code>123</code>
          <number>1234-456</number>
          </phone>
          <fax>
          <code>123</code>
          <number>9999-999</number>
          </fax>
          </person>
          暈...
          一般都是這樣啊:
          <person firstname="Joe"...>

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2009-06-30 21:41 by 地方
          @Lirf你會(huì)不會(huì)啊,自己不研究最新的技術(shù)。

          # re: XStream兩分鐘教程(譯)  回復(fù)  更多評(píng)論   

          2013-09-04 16:02 by asd
          @Lirf
          我自己研究出來(lái)了一種方法:
          在domain的屬性上加上@XStreamAsAttribute
          然后在代碼中打開(kāi)自動(dòng)檢查標(biāo)簽:xStream.autodetectAnnotations(true);
          就能生成你要的形式的xml文檔了.
          不曉得還有沒(méi)其他好辦法.

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 贵阳市| 井陉县| 商河县| 永济市| 淄博市| 鄂温| 珠海市| 鸡东县| 罗定市| 巴青县| 军事| 永年县| 丹寨县| 青铜峡市| 乐亭县| 双流县| 区。| 板桥市| 盐池县| 淮北市| 奈曼旗| 乐昌市| 扬中市| 新蔡县| 耿马| 界首市| 临湘市| 拜泉县| 古田县| 广河县| 镶黄旗| 抚顺市| 和林格尔县| 榆树市| 讷河市| 伊吾县| 苍梧县| 界首市| 延庆县| 神农架林区| 子洲县|