2011-04-29 117 views
8

如何将一个xml文件转换为简单的java bean? 它是一个简单的xml文件,没有任何xsd,它是从我没有访问的java bean生成的。将xml转换为java bean

我尝试使用xmlbeans首先从xml生成xmd,然后从xsd生成类。我有一堆课。我正在寻找一个单独的java bean类。

回答

-1

您可以使用像Castor或JAXB这样的工具将XML映射到java类。 Castor相当容易使用。

12

JAXB

JAXB(JSR-222)提供了一种简单的方法将对象转换为XML。有此标准的许多开放源代码实现,包括:(包含在Java SE 6的参考实现)

  • EclipseLink JAXB (MOXy)

    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(MOXY)

    MOXY具有基于XPath映射扩展。这意味着我们可以把我们的同一个Address类,并将其映射到谷歌的地理编码格式:

    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> 
    

    欲了解更多信息