gpt4 book ai didi

java - 如何使用 JAXB 输出对象集合?

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:21 24 4
gpt4 key购买 nike

无法按预期从 java 类生成所需的 XML。

这是一个定义zoo属性的类

**//Modal Class**
public class Zoo
{
private String name;
private String place;
//Getters Setters

}

带有动物园类列表的 Action 类以 XML 格式

//具有多个zoo类对象的Action类

@ManagedBean
@XmlRootElement
public @SessionScoped class zoos implements Serializable {
private String name;
private String place;
private static final ArrayList<Zoo> zoo_list
= new ArrayList<Zoo>();

@XmlElement
public ArrayList<Zoo> getZoo_list()
{
return zoo_list;

}
public void xmleg()
{

File file = new File("C:\\file.xml");
for(Zoo add: zoo_list)
{
try
{
JAXBContext jaxbContext = JAXBContext.newInstance(Zoos.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();


jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);


jaxbMarshaller.marshal(new JAXBElement<Zoo>(new QName("","Zoo"),zoo.class,add),file);
jaxbMarshaller.marshal(new JAXBElement<Zoo>(new QName("","Zoo"),zoo.class,add),System.out);

} catch (JAXBException e) {
e.printStackTrace();
}
}
}

生成的输出是:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>

但预期输出应该是:

 <zoos>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
</zoos>

也尝试过使用 @XMLElementWrapper 注释,但它也不起作用。已经浏览了很多教程,但没有找到解决方案。

最佳答案

更新

我刚刚重读了您的问题,您已经有了 Zoos 类。您应该编码该实例,而不是 zoo_list 属性中的各个项目。您可以使用 @XmlElement 注释更改属性映射到的元素名称。

@XmlElement(name="zoo")
public ArrayList<Zoo> getZoo_list()
<小时/>

JAXB (JSR-222) 实现需要根对象。最简单的事情是创建一个名为 Zoos 的对象,该对象保存 Zoo 对象列表并对其进行编码。

@XmlRootElement
public class Zoos {

private List<Zoo> zoo;

public List<Zoo> getZoo() {
return zoo;
}

public void setZoo(List<Zoo> zoo) {
this.zoo = zoo;
}

}

或者,您可以为 File 创建一个 FileWriter。然后你可以自己编写开始元素。然后使用 JAXB 将每个 Zoo 实例编码到 FileWriter(您需要利用以下属性让 JAXB 排除 XML header 。

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

最后您需要关闭根元素。

关于java - 如何使用 JAXB 输出对象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15702230/

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