1

XML ファイルがあり、その xml スキーマにはカップルが含まcomplexTypeれています。そのため、xml ファイルを非整列化するときに、xml パーサーに my xml schema. それを行うことは可能ですか、そうであればどのように行うのですか?

EDIT : I の後unmarshal、オブジェクトのすべてのフィールドが null になります。理由はありますか?

4

1 に答える 1

1

アップデート

表示されている問題は、コンテンツがNameAndAddress要素内にネストされていることが原因です。そのインスタンスを保持するNameAndAddressクラスを導入できます。PackageLabel

パッケージラベル

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {

    @XmlElement(name="NameAndAddress")
    private NameAndAddress nameAndAddress;

}

名前と住所

import javax.xml.bind.annotation.XmlElement;

public class NameAndAddress {

    @XmlElement(name="Name")
    private String name;

    @XmlElement(name="Address1")
    private String address1;

    @XmlElement(name="Address2")
    private String address2;

    @XmlElement(name="City")
    private String city;

    @XmlElement(name="State")
    private String state;

    @XmlElement(name="ZipCode")
    private String zipCode;

}

EclipseLink JAXB (MOXy) の @XmlPath 拡張

あるいは、 EclipseLink JAXB (MOXy)@XmlPathの拡張機能を使用することもできます。

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

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

@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {

    @XmlPath("NameAndAddress/Name/text()")
    private String name;

    @XmlPath("NameAndAddress/Address1/text()")
    private String address1;

    @XmlPath("NameAndAddress/Address2/text()")
    private String address2;

    @XmlPath("NameAndAddress/City/text()")
    private String city;

    @XmlPath("NameAndAddress/State/text()")
    private String state;

    @XmlPath("NameAndAddress/ZipCode/text()")
    private String zipCode;

}

詳細については


Unmarshaller のインスタンスに XML スキーマを設定できます。これにより、JAXB は XML をオブジェクトに変換する際に入力を検証します。

XML スキーマからオブジェクト モデルを生成する場合は、JAXB を使用してそれを行うこともできます。

于 2011-06-15T22:47:52.617 に答える