在列表X的编组中排除外部节点. [英] Exclude outer node in marshalling of List<X>

查看:63
本文介绍了在列表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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆