简体   繁体   English

将 xml 转换为 java bean

[英]Convert xml to java bean

How can I covert a an xml file to a simple java bean?如何将 xml 文件转换为简单的 java bean? Its a simple xml file without any xsd, which was generated from a java bean, which I don't have access to.它是一个简单的 xml 文件,没有任何 xsd,它是从 java bean 生成的,我无权访问。

I tried using xmlbeans to first generate the xmd from xml and then to generate classes from the xsd.我尝试使用 xmlbeans 首先从 xml 生成 xmd,然后从 xsd 生成类。 I got a bunch of classes.我有一堆课。 I am looking for a single java bean class.我正在寻找单个 java bean class。

JAXB JAXB

JAXB ( JSR-222 ) provides an easy way to convert objects to XML. JAXB ( JSR-222 ) 提供了一种将对象转换为 XML 的简单方法。 There are many open source implementations of this standard including:该标准有许多开源实现,包括:

JAXB has a default mapping for Java objects to XML. JAXB 具有 Java 对象到 XML 的默认映射。 This mapping can be customized through the application of annotations.这种映射可以通过应用注释来定制。

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;

}

Would correspond to the following XML:将对应于以下 XML:

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

EclipseLink JAXB (MOXy) EclipseLink JAXB (MOXy)

MOXy has an XPath based mapping extension. MOXy 有一个基于 XPath 的映射扩展。 This means we can take our same Address class and map it to Google's geocode format:这意味着我们可以将相同的地址 class 和 map 转换为 Google 的地理编码格式:

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;

}

The above class corresponds to the following XML:上面的class对应下面的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> 

For more Information了解更多信息

You could use a tool like Castor or JAXB to map the XML to a java class. You could use a tool like Castor or JAXB to map the XML to a java class. Castor is fairly easy to use. Castor相当容易使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM