9

XMLファイルを単純なJava Beanに変換するにはどうすればよいですか? 私がアクセスできないJava Beanから生成された、xsdのない単純なxmlファイルです。

xmlbeans を使用して、最初に xml から xmd を生成し、次に xsd からクラスを生成しようとしました。私はたくさんのクラスを手に入れました。単一の Java Bean クラスを探しています。

4

3 に答える 3

13

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

MOXy には、XPath ベースのマッピング拡張機能があります。これは、同じ Address クラスを取得して、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;

}

上記のクラスは、次の 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> 

詳細については

于 2011-04-29T10:20:01.400 に答える
0

Castor Mappingを試してください。

于 2011-04-29T04:09:38.557 に答える
-2

Castor や JAXB などのツールを使用して、XML を Java クラスにマップできます。キャスターはかなり使いやすいです。

于 2011-04-29T04:10:23.570 に答える