gpt4 book ai didi

xml - JAXB:如何编码列表中的对象?

转载 作者:数据小太阳 更新时间:2023-10-29 01:37:03 35 4
gpt4 key购买 nike

也许是个愚蠢的问题:我有一个 List类型 <Data>我想将其编码到一个 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 类结构的推荐方法吗?

最佳答案

在记录属性上添加:

@XmlElementWrapper(name="records")
@XmlElement(name="data")

有关 JAXB 和集合属性的更多信息,请参阅:

关于xml - JAXB:如何编码列表中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683598/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com