Có lẽ một câu hỏi ngu ngốc: Tôi có một số List
loại <Data>
mà tôi muốn sắp xếp thành một tệp XML. Đây là lớp học của tôi Database
chứa một ArrayList
...JAXB: Làm thế nào để sắp xếp các đối tượng trong danh sách?
@XmlRootElement
public class Database
{
List<Data> records = new ArrayList<Data>();
public List<Data> getRecords() { return records; }
public void setRecords(List<Data> records) { this.records = records; }
}
... và đây là lớp dữ liệu:
// @XmlRootElement
public class Data
{
String name;
String address;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
}
Sử dụng lớp thử nghiệm sau đây ...
public class Test
{
public static void main(String args[]) throws Exception
{
Data data1 = new Data();
data1.setName("Peter");
data1.setAddress("Cologne");
Data data2 = new Data();
data2.setName("Mary");
data2.setAddress("Hamburg");
Database database = new Database();
database.getRecords().add(data1);
database.getRecords().add(data2);
JAXBContext context = JAXBContext.newInstance(Database.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(database, new FileWriter("test.xml"));
}
}
. ..Tôi đã nhận được kết quả:
<database>
<records>
<address>Cologne</address>
<name>Peter</name>
</records>
<records>
<address>Hamburg</address>
<name>Mary</name>
</records>
</database>
Nhưng đó không phải là những gì tôi mong đợi, nghĩa là tất cả các thẻ cho các đối tượng <Data>
bị thiếu. Tôi đang tìm kiếm một cách để xuất dữ liệu trong cấu trúc sau đây, nhưng tôi không biết làm thế nào để đạt được điều này:
<database>
<records>
<data>
<address>Cologne</address>
<name>Peter</name>
</data>
<data>
<address>Hamburg</address>
<name>Mary</name>
</data>
</records>
</database>
Một câu hỏi thêm: nếu tôi muốn để đối phó với vấn đề này mà không sử dụng @XmlElementWrapper
và @XmlElement
chú thích, tôi có thể giới thiệu một lớp trung gian
public class Records
{
List<Data> data = new ArrayList<Data>();
public List<Data> getData() { return data; }
public void setData(List<Data> data) { this.data = data; }
}
sử dụng bởi các lớp cơ sở sửa đổi
@XmlRootElement
public class Database
{
Records records = new Records();
public Records getRecords() { return records; }
public void setRecords(Records records) { this.records = records; }
}
trong một chút thay đổi Test
lớp:
...
Database database = new Database();
database.getRecords().getData().add(data1);
database.getRecords().getData().add(data2);
...
Kết quả cũng là:
<database>
<records>
<data>
<address>Cologne</address>
<name>Peter</name>
</data>
<data>
<address>Hamburg</address>
<name>Mary</name>
</data>
</records>
</database>
Đây có phải là sự khuyến cách để tạo ra một cấu trúc lớp Java theo cấu trúc file XML trên ?
Tôi không thấy bạn sử dụng 'DataList' trong lớp thử nghiệm của bạn. – joschi
Xin lỗi tôi - tôi đã sao chép và dán lớp sai ... Bây giờ nó đã được sửa chữa trong ví dụ trên. – rmv