2011-04-29 9 views
8

어떻게하면 xml 파일을 간단한 Java bean으로 변환 할 수 있습니까? 액세스 할 수없는 java bean에서 생성 된 xsd가없는 간단한 xml 파일입니다.xml을 java bean으로 변환

먼저 xmlbeans를 사용하여 xml에서 xmd를 생성 한 다음 xsd에서 클래스를 생성 해 보았습니다. 수업이 많아. 나는 하나의 자바 빈 클래스를 찾고있다.

답변

-1

Castor 또는 JAXB와 같은 도구를 사용하여 XML을 Java 클래스에 매핑 할 수 있습니다. Castor은 상당히 사용하기 쉽습니다.

12

JAXB

JAXB (JSR-222)는 XML 객체를 변환하는 쉬운 방법을 제공합니다. 포함이 표준의 많은 오픈 소스 구현이 있습니다

JAXB Java 객체에 대한 XML에 대한 기본 매핑이 있습니다. 이 매핑은 주석 적용을 통해 사용자 정의 할 수 있습니다.

import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.Element; 

@XmlRootElement 
public class Address { 

    private String street; 

    private String city; 

    private String state; 

    private String country; 

    @XmlElement(name="postal-code") 
    private String postalCode; 

} 

는 다음과 같은 XML에 해당한다 :

<address> 
    <street>123 A Street</street> 
    <city>Any Town</city> 
    <state>A State</state> 
    <postal-code>12345</postal-code> 
</address> 

는 EclipseLink JAXB (목시)를

목시는 XPath를 기반으로 매핑 확장자를 갖습니다. 이것은 우리가 우리의 같은 주소 클래스를 가지고 구글의 지오 형식으로 매핑 할 수 있습니다 의미 :

import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement(name="kml") 
@XmlType(propOrder={"country", "state", "city", "street", "postalCode"}) 
public class Address { 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()") 
    private String street; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:LocalityName/text()") 
    private String city; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()") 
    private String state; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()") 
    private String country; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()") 
    private String postalCode; 

} 

위 클래스는 다음과 같은 XML에 해당 자세한 내용

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.0" xmlns:ns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> 
    <Response> 
     <Placemark> 
      <ns:AddressDetails> 
       <ns:Country> 
        <ns:CountryNameCode>US</ns:CountryNameCode> 
        <ns:AdministrativeArea> 
         <ns:AdministrativeAreaName>CA</ns:AdministrativeAreaName> 
         <ns:SubAdministrativeArea> 
          <ns:Locality> 
           <ns:LocalityName>Mountain View</ns:LocalityName> 
           <ns:Thoroughfare> 
            <ns:ThoroughfareName>1600 Amphitheatre Pkwy</ns:ThoroughfareName> 
           </ns:Thoroughfare> 
           <ns:PostalCode> 
            <ns:PostalCodeNumber>94043</ns:PostalCodeNumber> 
           </ns:PostalCode> 
          </ns:Locality> 
         </ns:SubAdministrativeArea> 
        </ns:AdministrativeArea> 
       </ns:Country> 
      </ns:AddressDetails> 
     </Placemark> 
    </Response> 
</kml>