2012-11-09 23 views
1
public class Group { 
    //many other fields 
    public List<Person> persons; 
} 

public class Person { 
    public String name; ... 
} 

的编组当我我marhsal想了一堆人节点:排除在外节点列表<X>

<person> 
    <name>..</name> 
</person> 
<person> 
    <name>..</name> 
</person> 

,而不是这样的:(与人的节点作为一个人的节点儿童)

<persons> 
    <person> 
     <name>..</name> 
    </person> 
    <person> 
     <name>..</name> 
    </person> 
<persons> 

我该如何做到这一点?

+2

这应该是它如何出现在默认情况下,除非有上一个'@ XmlElementWrapper'注解'人的财产。如果有,请尝试删除它。 –

回答

1

UPDATE

如果你指的是persons作为分组元素,而不是根元素JAXB (JSR-222)实现默认不添加。

组(无分组元素)

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注解获得分组元素

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); 
    } 
+1

对不完整的信息感到抱歉,但实际上,Group类还有许多其他字段。如果我按你的建议行事,那我想我还需要分开放置所有其他领域?我希望一次性整理集体班。 – arahant

+0

@arahant - 我已经更新了我的答案。 –