[英]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>
節點,並且該列表可以包含active
和name
屬性? 這是我的對象:
@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.