簡體   English   中英

JAXB解組具有相同名稱的多個節點

[英]JAXB Unmarshal multiple nodes with same name

我有一個XML元素,其節點名稱需要解組。 我需要列表或數組中的服務。 這是我的XML:

<provider name="foo">
    <service active="true" name="alias" timeout="N/A">value1</service>
    <service active="true" name="caption" timeout="N/A">value2</service>
    <service active="true" name="expect_manifest_file" timeout="15m">value3</service>
    <service active="true" name="expect_SD_and_HD_ADI" timeout="15m">value4</service>
</provider>

我只知道如何獲取XML中的最后一個元素。 如何列出所有<service>節點,並且該列表可以包含activename屬性? 這是我的對象:

@XmlRootElement (name="provider")
public class Customer {
    String service;

    public String getService() {
        return service;
    }
    @XmlElement(name="service")
    public void setService(String service) {
        this.service = service;
    }
}

我會根據您的需要采取另一種方法,也許這就是您想要的,讓我知道。

首先,我將創建Service類,該類將處理您的Service節點的信息:

@XmlRootElement(name = "service")
@XmlAccessorType (XmlAccessType.FIELD)

public class Service {

private boolean active;
private String name;

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

然后,我將創建類“ Customer”,該類用於保存要包含在XML中的服務:

@XmlRootElement(name = "provider")
@XmlAccessorType (XmlAccessType.FIELD)

public class Customer {

@XmlElementWrapper
@XmlElement(name = "service")
private List<Service> services = null;

public List<Service> getServices() {
    return services;
}

public void setServices(List<Service> services) {
    this.services = services;
}

}

我在主類中准備了一些方法來確保它能正常工作:

public class JaxbHandler {

public void marshal(String path, Customer customer) throws JAXBException {
    JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    jaxbMarshaller.marshal(customer, System.out);
    jaxbMarshaller.marshal(customer, new File(path));
}

public Customer unmarshal(String path) throws JAXBException {
    Customer cust = null;
    JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

    cust = (Customer) jaxbUnmarshaller.unmarshal(new File(path));

    return cust;
}

public static void main(String[] args) throws JAXBException {
    String path = "c:/dev/sample.xml";

    JaxbHandler sampleHandler = new JaxbHandler();

    List<Service> myServices = new ArrayList<Service>();

    Service s1 = new Service();
    s1.setActive(true);
    s1.setName("Service A");

    Service s2 = new Service();
    s2.setActive(true);
    s2.setName("Service B");

    myServices.add(s1);
    myServices.add(s2);

    Customer cust = new Customer();
    cust.setServices(myServices);

    sampleHandler.marshal(path, cust);

    Customer backAgain = sampleHandler.unmarshal(path);



}

}

請讓我知道這是否適合您。 快樂的編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM