자바 빈 과 Xml 상호 변환 - XStream

4736 단어
Xstream 소개
Xstream 은 OXmapping 기술 로 XML 파일 의 직렬 화 를 처리 하 는 프레임 워 크 입 니 다. 자바 빈 을 직렬 화하 거나 XML 파일 을 반 직렬 화 할 때 다른 보조 클래스 와 맵 파일 이 필요 하지 않 아 XML 직렬 화 를 복잡 하지 않 게 합 니 다.Xstream 도 자바 빈 을 Json 또는 역 직렬 화 할 수 있어 사용 하기에 매우 편리 하 다.
특징:
간소 화 된 API;맵 없 는 파일;고성능, 저 메모리 점용;깔끔 한 XML;수정 대상 필요 없 음;내부 개인 필드 를 지원 합 니 다. private 속성 에 set / get 방법 을 요구 하지 않 습 니 다.클래스 는 기본 구조 기 가 필요 없습니다.
Xstream 주석 상용 지식:
주해
역할 목표
@ XStreamAlias ("message") 별명 주석
클래스
@ XStreamImplicit 집합 무시
집합 필드
@ XStreamAsAttribute 필드 를 노드 속성 으로 변환
필드
@ XStreamOmitField 속성 무시
필드
@ XStreamConverter (Single ValueCalendarConverter. class) 주입 변환기
대상
  • 중요 한 것 은 주 해 를 배 우 는 것 과 주 해 를 통 해 직접 API 로 MAPPING
  • 을 사용 하지 않 는 것 이다.
  • 그 중 차 점 은 XML 노드 와 MODEL 속성 명 이 다른 처리
  • Xstream 의 간단 한 예
        
    compile('com.thoughtworks.xstream:xstream:1.4.7')
    
    //xml  
    
    268216
    34.055596
    -118.113722
    
    
    
    16
    
    
    //JavaBean
    //        ,        , :com.common.entry.BusStation 
    @XStreamAlias("bus_station")
    public class BusStation implements Serializable {
        //      
        @XStreamAlias("aid")
        private String aid;
        //   xml             
        private Double latitude;
    
        private Double longitude;
    
        private String name;
        @XStreamAlias("station_city")
        private String stationCity;
        @XStreamOmitField()
        private String time;
    }
    
    public class Test
    {
        public static void main(String[] args)
        {
            BusStation bean=new BusStation();
             XStream xstream = new XStream(new DomDriver());
             xstream.ignoreUnknownElements();
             xstream.processAnnotations(BusStation.class);
    
            //XML   
            String xml = xstream.toXML(bean);
            System.out.println(xml);
    
            //XML    
            bean=(Person)xstream.fromXML(xml);
            System.out.println(bean);
        }
    }
    
    
    

    xml 와 bean 의 맵 핑
    1. 주 해 를 통 해 비 추기
    //       
    @XStreamAlias("person") 
    
    //       
    @XStreamAlias("username")
    private String name;  
    
    //      XML   
    @XStreamImplicit()
    private List
    addressList = new ArrayList
    ();

    2. api 를 통 해 비 추기
    //       
    xstream.alias("person",Person.class);
    stream.alias("address1", Address.class); 
    
    //       
    stream.aliasField("username", Person.class, "name");
    
    //        xml    
    stream.addImplicitCollection(Person.class, "addressList");
    
    // name    Person   
    //      @XStreamAsAttribute()
    stream.useAttributeFor(Person.class, "name");
    
    //      XML   ,        xml    
    xStream.addImplicitCollection(Person.class, "addressList");
    
    //        Person 
    stream.processAnnotations(new Class[]{People.class, Place.class});
    

    3. 기본 네 임 스페이스 는 기본 XML 네 임 스페이스 를 정의 하여 하위 요소 의 시작 표시 에 접 두 사 를 사용 하지 않 아 도 됩 니 다.그의 문법 은 다음 과 같다.
    
    

    다음 XML 문 서 는 table 요소 에 과일 정 보 를 포함 하고 있 습 니 다.
    Apples Bananas

    4. XStreamImplicit 주 해 는 collection 이나 map 형식의 구성원 변수 에서 데 이 터 를 xml 같은 차원 의 요소 로 변환 해 야 할 때 이 구성원 변수 에서 이 주 해 를 사용 할 수 있 습 니 다.
    @XStreamImplicit(itemFieldName = "List_Element")
    private List jps;
       xml  :
    
    
    
    man
        
    
    
    woman
        
    
    
    

    XStreamImplicit 주석 은 두 가지 속성 이 있 습 니 다:
  • itemFieldName 은 현재 집합 데이터 가 xml 요소 로 변 환 될 때의 element Name 을 말 합 니 다.
  • keyFieldName 은 집합 요소 가 복잡 한 대상 일 때 집합 요소 의 구성원 변수 이름 을 요소 의 element Name 으로 사용 합 니 다. 집합 요소 가 기본 데이터 형식 과 String 형식 일 때 keyFieldName 이 지정 한 값 은 요소 의 element Name 으로 사 용 됩 니 다.

  • 도구 클래스
    // xml  object
        public static  T toBean(String xmlStr, Class cls) {
            if (TextUtils.isEmpty(xmlStr) || xmlStr.contains("Error")) {
                return null;
            }
            try {
                XStream xstream = new XStream(new DomDriver());
                //        
                xstream.ignoreUnknownElements();
                //       Annotations      
                xstream.processAnnotations(cls);
                T obj = (T) xstream.fromXML(xmlStr);
                return obj;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    

    레 퍼 런 스
    http://blog.csdn.net/pushme_pli/article/details/7829621

    좋은 웹페이지 즐겨찾기