JAXB: демонтировать файл XML с заданной схемой XML - PullRequest
1 голос
/ 16 июня 2011

У меня есть XML-файл, и его XML-схема содержит пары complexType.Поэтому, когда я распаковываю файл xml, я хочу дать парсеру xml мой xml schema.Возможно ли это сделать, если да, то как это сделать?

EDIT : после I unmarshal каждое поле в моем объекте равно нулю.Есть идеи почему?

1 Ответ

1 голос
/ 16 июня 2011

UPDATE

Проблема, с которой вы сталкиваетесь, связана с вложением содержимого в элемент NameAndAddress. Вы можете ввести класс NameAndAddress, в котором PackageLabel содержит экземпляр этого класса.

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;

}

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;

}

Расширение @XmlPath EclipseLink JAXB (MOXy)

В качестве альтернативы вы можете использовать расширение @XmlPath в EclipseLink JAXB (MOXy) :

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;

}

Для получения дополнительной информации

<Ч />

Вы можете установить схему XML для экземпляра Unmarshaller. Это заставит JAXB проверять ввод, в то время как он преобразовывает XML в объекты:

Если вы хотите сгенерировать объектную модель из схемы XML, вы также можете использовать JAXB для этого:

...