【发布时间】:2011-04-10 15:52:38
【问题描述】:
也许是个愚蠢的问题:我有一个 <Data> 类型的 List,我想将其编组为 XML 文件。这是我的课程Database,其中包含一个ArrayList...
@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; }
}
...这是数据类:
// @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; }
}
使用下面的测试类...
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"));
}
}
...我得到了结果:
<database>
<records>
<address>Cologne</address>
<name>Peter</name>
</records>
<records>
<address>Hamburg</address>
<name>Mary</name>
</records>
</database>
但这不是我所期望的,即<Data> 对象的所有标签都丢失了。我正在寻找一种以以下结构导出数据的方法,但我不知道如何实现:
<database>
<records>
<data>
<address>Cologne</address>
<name>Peter</name>
</data>
<data>
<address>Hamburg</address>
<name>Mary</name>
</data>
</records>
</database>
另外一个问题:如果我想不使用@XmlElementWrapper和@XmlElement注解来处理这个问题,我可以引入一个中间类
public class Records
{
List<Data> data = new ArrayList<Data>();
public List<Data> getData() { return data; }
public void setData(List<Data> data) { this.data = data; }
}
被修改后的基类使用
@XmlRootElement
public class Database
{
Records records = new Records();
public Records getRecords() { return records; }
public void setRecords(Records records) { this.records = records; }
}
在稍作修改的Test 类中:
...
Database database = new Database();
database.getRecords().getData().add(data1);
database.getRecords().getData().add(data2);
...
结果也是:
<database>
<records>
<data>
<address>Cologne</address>
<name>Peter</name>
</data>
<data>
<address>Hamburg</address>
<name>Mary</name>
</data>
</records>
</database>
这就是推荐按照上面的XML文件结构创建Java类结构的方式吗?
【问题讨论】:
-
我没有看到你在测试类中使用
DataList。 -
对不起 - 我复制并粘贴了错误的类...现在在上面的示例中更正了。
标签: xml jaxb arraylist unmarshalling