Jaxb 排除列表编组中的外部节点<;X>; 公共类组{ //许多其他领域 公众人士名单; } 公共阶层人士{ 公共字符串名称。。。 }

Jaxb 排除列表编组中的外部节点<;X>; 公共类组{ //许多其他领域 公众人士名单; } 公共阶层人士{ 公共字符串名称。。。 },jaxb,Jaxb,当我marhsal时,我想得到一组Person节点: .. .. 而不是:(将person节点作为子节点的person节点) .. .. 如何实现这一点?更新 如果将persons称为分组元素而不是根元素,则默认情况下实现不会添加一个 分组(无分组元素) UM13305973包; 导入java.util.*; 导入javax.xml.bind.annotation.*; @XmlRootElement 公共课组{ //许多其他领域 @xmlement(name=“person”) pub

当我marhsal时,我想得到一组Person节点:


..
..
而不是:(将person节点作为子节点的person节点)


..
..

如何实现这一点?

更新

如果将
persons
称为分组元素而不是根元素,则默认情况下实现不会添加一个

分组(无分组元素)

UM13305973包;
导入java.util.*;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共课组{
//许多其他领域
@xmlement(name=“person”)
public List persons=new ArrayList();
}

UM13305973包;
公共阶层人士{
公共字符串名称;
}
演示

UM13305973包;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Group.class);
组=新组();
Person person1=新的Person();
person1.name=“Jane”;
组。人员。添加(人员1);
Person person2=新的Person();
person2.name=“约翰”;
组。人员。添加(人员2);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
编组员。编组(组、系统、输出);
}
}
输出


简
约翰

分组(带分组元素)

您需要添加
@xmlementwrapper
注释以获得分组元素

UM13305973包;
导入java.util.*;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共课组{
//许多其他领域
@XmlElementWrapper
@xmlement(name=“person”)
public List persons=new ArrayList();
}
输出(带分组元素)


简
约翰

原始答案

您可以执行以下操作:

jaxbcontextjc=JAXBContext.newInstance(Person.class);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);//格式输出
setProperty(marshaller.JAXB_片段,true);//卸下收割台
for(个人:组。个人){
封送员。封送员(人员、系统、输出);
}

更新

如果将
persons
称为分组元素而不是根元素,则默认情况下实现不会添加一个

分组(无分组元素)

UM13305973包;
导入java.util.*;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共课组{
//许多其他领域
@xmlement(name=“person”)
public List persons=new ArrayList();
}

UM13305973包;
公共阶层人士{
公共字符串名称;
}
演示

UM13305973包;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Group.class);
组=新组();
Person person1=新的Person();
person1.name=“Jane”;
组。人员。添加(人员1);
Person person2=新的Person();
person2.name=“约翰”;
组。人员。添加(人员2);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
编组员。编组(组、系统、输出);
}
}
输出


简
约翰

分组(带分组元素)

您需要添加
@xmlementwrapper
注释以获得分组元素

UM13305973包;
导入java.util.*;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共课组{
//许多其他领域
@XmlElementWrapper
@xmlement(name=“person”)
public List persons=new ArrayList();
}
输出(带分组元素)


简
约翰

原始答案

您可以执行以下操作:

jaxbcontextjc=JAXBContext.newInstance(Person.class);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);//格式输出
setProperty(marshaller.JAXB_片段,true);//卸下收割台
for(个人:组。个人){
封送员。封送员(人员、系统、输出);
}

很抱歉信息不完整,但实际上,Group类还有许多其他字段。如果我按照你的建议去做的话,那么我想我也需要把所有其他领域分开整理?我希望一次性封送整个组类。很抱歉信息不完整,但实际上,组类还有许多其他字段。如果我按照你的建议去做的话,那么我想我也需要把所有其他领域分开整理?我希望一次性封送整个组类。默认情况下应该是这样的,除非
persons
属性上有
@xmlementwrapper
注释。如果有,请尝试删除它。默认情况下,它应该是这样显示的,除非
persons
属性上有
@xmlementwrapper
注释。如果有,请尝试将其删除。
public class Group {
    //many other fields
    public List<Person> persons;
}

public class Person {
    public String name; ...
}
<person>
    <name>..</name>
</person>
<person>
    <name>..</name>
</person>
<persons>
    <person>
      <name>..</name>
    </person>
    <person>
      <name>..</name>
    </person>
<persons>