Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          JAXB2完成java bean到xml的相互轉換

          Posted on 2011-06-03 12:04 landor 閱讀(7882) 評論(1)  編輯  收藏 所屬分類: XML
          JAXB功能非常強大,主要是對java bean到xml之間的互轉;JAXB的doc比較全面,網址:
          http://jaxb.java.net/tutorial/
          jdk5+已經自帶了jaxb的包;應該是在rt.jar里;用法也比較簡單,步驟如下:
          1 加入@XmlRootElement注解,標識xml根節點,默認名字是類名,可以加入name屬性來改名;
          @XmlRootElement
          public class User{
              
          private String userId;
              
          private String userName;
              
          public String getUserId(){};
              
          public String getUserName(){};
          2 加入@XmlElement注解,生成xml中的子節點,其實可以不加,不加默認就是生成,可以指定name修改節點名
              private String userId;
              private String userName;
               @XmlElement
              public String getUserId(){};
              
          public String getUserName(){};
          3 現在就可以生成xml了,代碼如下:
          public class TestJAXB {
              @Test
              
          public void bean2XML() throws Exception{
                  User user 
          = new User();
                  user.setUserId(
          "id1");
                  user.setUserName(
          "aaa");
                  JAXBContext context 
          = JAXBContext.newInstance(user.getClass());
                  Marshaller m 
          = context.createMarshaller();
                  StringWriter sw 
          = new StringWriter();
                  m.marshal(user,sw);
                  System.out.println(sw.toString());
              }
          }
          4 生成了xml文件,可以轉換成bean,比如:
          public class TestJAXB {
              @Test
              
          public void xml2Bean() throws Exception{
                  User user 
          = new User();
                  String xml 
          = "xml字符串";
                  JAXBContext context 
          = JAXBContext.newInstance(user.getClass());
                  Unmarshaller um 
          =context.createUnmarshaller();
                  StringReader sr 
          = new StringReader(xml);
                  user 
          = (User)um.unmarshal(sr);
                  
                  System.out.println(user.getUserId());
              }
          }

          簡單轉化就做完了,有幾個地方:
          1 生成xml比較簡單,如果想把User里的userId和name變成xml根節點的一個屬性可用(如果有get方法,需要加到get方法上)
              @XmlAttribute
              
          String userId;
              @XmlAttribute
             
          String userName;
          生成的xml類似:
          <user userId="id1" userName="aaa">
              
          <!--其他元素內容-->
          </user>

          2 如果想在節點外面包裹一層,可以用
              @XmlElementWrapper(name="wapper" )
              @XmlAttribute
              
          private String userName;
          生成的xml類似:
          <user>
              
          <userId>id1</userId>
              
          <wapper>
                  
          <userName>aaa</userName>
              
          </wapper>
              
          <!--其他元素內容-->
          </user>
          3 關于多態,JAXB也是支持的:有兩種方式
              A 通過@XmlSeeAlso,比如:
          @XmlRootElement
          public class User{
              Person person;
          }

          @XmlSeeAlso({Man.
          class, Girl.class})
          public class Person{
          }

          public class Man extends Person{
          }

          public class Girl extends Person{
          }

            B 用SeeAlso注解的缺點是:每次加一個子類都需要修改注解代碼重新編譯,其實可以直接在JAXBContext.newInstance()中加入這些子類:比如
          JAXBContext context = JAXBContext.newInstance(user.getClass(), Man.class, Girl.class);

          以上兩種方式都可以把xml  Unmarshaller 成java bean;根據情況任選其一。


          Feedback

          # re: JAXB2完成java bean到xml的相互轉換  回復  更多評論   

          2015-03-08 09:01 by zuidaima
          java通過JAXB框架轉換xml為java bean對象代碼片段分享 http://zuidaima.com/share/2180116115393536.htm

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 泗水县| 四平市| 阳春市| 杭锦旗| 旺苍县| 邳州市| 延边| 柘荣县| 溧水县| 璧山县| 乌兰察布市| 延吉市| 海南省| 北碚区| 富宁县| 广宁县| 旺苍县| 淮阳县| 衡阳县| 来宾市| 曲阜市| 读书| 潼南县| 浙江省| 合作市| 全州县| 文水县| 中山市| 鸡泽县| 永登县| 延吉市| 乌恰县| 武城县| 海门市| 乐业县| 龙胜| 娱乐| 南和县| 哈巴河县| 阿荣旗| 舒兰市|