在列表X的编组中排除外部节点. [英] Exclude outer node in marshalling of List<X>
本文介绍了在列表X的编组中排除外部节点.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
public class Group {
//many other fields
public List<Person> persons;
}
public class Person {
public String name; ...
}
当我进行婚礼时,我想获得一堆Person节点:
When I marhsal I want to get a bunch of Person nodes:
<person>
<name>..</name>
</person>
<person>
<name>..</name>
</person>
代替此:(将人节点作为子节点的人节点)
instead of this: (a persons node with person nodes as children)
<persons>
<person>
<name>..</name>
</person>
<person>
<name>..</name>
</person>
<persons>
我该如何实现?
推荐答案
更新
如果您将 persons
称为分组元素而不是根元素,则 JAXB(JSR-222) 实现默认情况下不会添加一个.
If you are referring to persons
as a grouping element rather than a root element a JAXB (JSR-222) implementation does not add one by default.
组(不带分组元素)
package forum13305973;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Group {
//many other fields
@XmlElement(name="person")
public List<Person> persons = new ArrayList<Person>();
}
人员
package forum13305973;
public class Person {
public String name;
}
演示
package forum13305973;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Group.class);
Group group = new Group();
Person person1 = new Person();
person1.name = "Jane";
group.persons.add(person1);
Person person2 = new Person();
person2.name = "John";
group.persons.add(person2);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(group, System.out);
}
}
输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
<person>
<name>Jane</name>
</person>
<person>
<name>John</name>
</person>
</group>
分组(带有分组元素)
您需要添加 @XmlElementWrapper
批注以获取分组元素
You need to add an @XmlElementWrapper
annotation to get a grouping element
package forum13305973;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Group {
//many other fields
@XmlElementWrapper
@XmlElement(name="person")
public List<Person> persons = new ArrayList<Person>();
}
输出(带有分组元素)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
<persons>
<person>
<name>Jane</name>
</person>
<person>
<name>John</name>
</person>
</persons>
</group>
原始答案
您可以执行以下操作:
JAXBContext jc = JAXBContext.newInstance(Person.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // format output
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); // remove header
for(Person person : group.persons) {
marshaller.marshal(person, System.out);
}
这篇关于在列表X的编组中排除外部节点.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文