使用XStream進(jìn)行POJO和xml之間的轉(zhuǎn)換

          XStream是一個開源項(xiàng)目,利用它可以方便的進(jìn)行java對象和xml之間進(jìn)行轉(zhuǎn)換,從而在測試,服務(wù)器設(shè)置等方面有很好的應(yīng)用。

          先建兩個java對象

          1.Adress類

          package ?xml_chb;

          public ? class ?Adress? {
          ????
          private ?String?provice;
          ????
          private ?String?city;
          ????
          public ?String?getCity()? {
          ????????
          return ?city;
          ????}

          ????
          public ? void ?setCity(String?city)? {
          ????????
          this .city? = ?city;
          ????}

          ????
          public ?String?getProvice()? {
          ????????
          return ?provice;
          ????}

          ????
          public ? void ?setProvice(String?provice)? {
          ????????
          this .provice? = ?provice;
          ????}

          }

          ?2.Person類

          package ?xml_chb;

          public ? class ?Person? {

          ????
          private ?String?name = "" ;
          ????
          private ?String?sex = "" ;
          ????
          private ? int ?age;
          ????
          private ?String?mobile;
          ????
          private ?Adress?adress;
          ????
          ????
          public ? int ?getAge()? {
          ????????
          return ?age;
          ????}


          ????
          public ? void ?setAge( int ?age)? {
          ????????
          this .age? = ?age;
          ????}


          ????
          public ?String?getMobile()? {
          ????????
          return ?mobile;
          ????}


          ????
          public ? void ?setMobile(String?mobile)? {
          ????????
          this .mobile? = ?mobile;
          ????}


          ????
          public ?String?getName()? {
          ????????
          return ?name;
          ????}


          ????
          public ? void ?setName(String?name)? {
          ????????
          this .name? = ?name;
          ????}


          ????
          public ?String?getSex()? {
          ????????
          return ?sex;
          ????}


          ????
          public ? void ?setSex(String?sex)? {
          ????????
          this .sex? = ?sex;
          ????}


          ????
          public ?Adress?getAdress()? {
          ????????
          return ?adress;
          ????}


          ????
          public ? void ?setAdress(Adress?adress)? {
          ????????
          this .adress? = ?adress;
          ????}


          }

          3.生成一個Person對象,并將其轉(zhuǎn)化為xml

          //生成一個java對象
          ??Person person=new Person();
          ??person.setName("chb");
          ??person.setAge(22);
          ??person.setSex("boy");
          ??
          ??//生成一個Adress對象
          ??Adress adr=new Adress();
          ??adr.setProvice("Beijing");
          ??adr.setCity("Beijing");
          ??person.setAdress(adr);
          ??
          ??//將java對象轉(zhuǎn)化為xml
          ??XStream xstream=new XStream(new DomDriver());
          ??String strxml=xstream.toXML(person);

          ??System.out.println(strxml);

          輸出:

          < xml__chb .Person >
          ??
          < name > chb </ name >
          ??
          < sex > boy </ sex >
          ??
          < age > 22 </ age >
          ??
          < adress >
          ????
          < provice > Beijing </ provice >
          ????
          < city > Beijing </ city >
          ??
          </ adress >
          </ xml__chb.Person >

          我們可以看到,xml根結(jié)點(diǎn)是<xml_chb.Person>是類的全名,這樣看起來很繁瑣,我們可以使用別名來改進(jìn)這一現(xiàn)象:

          ? xstream.alias("person",Person.class);
          ??strxml=xstream.toXML(person);
          ??System.out.println(strxml);

          輸出結(jié)果為:

          < person >
          ??
          < name > chb </ name >
          ??
          < sex > boy </ sex >
          ??
          < age > 22 </ age >
          ??
          < adress >
          ????
          < provice > Beijing </ provice >
          ????
          < city > Beijing </ city >
          ??
          </ adress >
          </ person >

          4.從xml轉(zhuǎn)化為POJO

          String str="<person><name>emily</name><sex>girl</sex><age>22</age><adress><provice>Beijing</provice><city>Beijing</city></adress></person>";
          ??Person person1=(Person)xstream.fromXML(str);
          ??System.out.println("姓名:"+person1.getName());
          ??System.out.println("性別:"+person1.getSex());

          輸出結(jié)果為:

          姓名:emily
          性別:girl

          5.修改元素值

          Adress adr1=new Adress();
          ??adr1.setProvice("Shanghai");
          ??adr1.setCity("Shanghai");
          ??person.setAdress(adr1);
          ??strxml=xstream.toXML(person);
          ??System.out.println(strxml);

          輸出結(jié)果:

          < person >
          ??
          < name > chb </ name >
          ??
          < sex > boy </ sex >
          ??
          < age > 22 </ age >
          ??
          < adress >
          ????
          < provice > Shanghai </ provice >
          ????
          < city > Shanghai </ city >
          ??
          </ adress >
          </ person >

          XStream的jar包可以直接到http://xstream.codehaus.org/下載,那里有一些簡單例子

          XStream是個很小的開源項(xiàng)目,所以它能實(shí)現(xiàn)的功能也就很有限,它只能包裝簡單類型的元素進(jìn)行轉(zhuǎn)換,復(fù)雜類型的,比如Calendar,Date等類型則需要用戶自己實(shí)現(xiàn)Converter。

          還有,XStream對xml的操作并不好,比如想把一個子節(jié)點(diǎn)變成屬性就是一個很復(fù)雜的工作,但是大家平時用于測試的話,看看對象中到底存著什么數(shù)據(jù),還是必要的。

          posted on 2006-09-25 23:33 揚(yáng)州夢 閱讀(289) 評論(0)  編輯  收藏 所屬分類: java

          統(tǒng)計(jì)

          主站蜘蛛池模板: 汤阴县| 大冶市| 高碑店市| 康保县| 合阳县| 乌兰察布市| 五河县| 讷河市| 苍南县| 沭阳县| 师宗县| 安国市| 保亭| 兴和县| 巨鹿县| 南陵县| 广宗县| 乌兰县| 灵山县| 太仓市| 屏东市| 晋宁县| 永嘉县| 融水| 聊城市| 康马县| 台州市| 景洪市| 兰溪市| 错那县| 分宜县| 沁源县| 亳州市| 景泰县| 邵东县| 晋州市| 章丘市| 芦溪县| 郑州市| 胶州市| 修武县|