Jaxb unmarshalling,每个elemet的列表被包裹

时间:2017-05-19 14:55:45

标签: java xml jaxb

这个xml有一个完整列表的包装:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <listWrapper>
    <box>
      <number>1</number>
    </box>
    <box>
      <number>2</number>
    </box>
    <box>
      <number>3</number>
    </box>
  </listWrapper>
</root>

我们可以这样读:

@XmlElementWrapper(name = "listWrapper")
@XmlElement(name = "box")
List<Box> boxList;

并用“box”作为根元素描述Box类

但是如果我把每个盒子包裹起来而不是所有的话,我怎么能制作相同的列表呢?

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <wrapper>
    <box>
      <number>1</number>
    </box>
  </wrapper>
  <wrapper>
    <box>
      <number>2</number>
    </box>
  </wrapper>
  <wrapper>
    <box>
      <number>3</number>
    </box>
  </wrapper>
</root>

最后我想列出没有包装级别的盒子。

1 个答案:

答案 0 :(得分:0)

根类(测试映射的主要方法):

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Root {


    private List<Wrapper> wrappers = new ArrayList<Wrapper>();  

    public Root(){

    }

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Root root = new Root();

        Wrapper wrapper1 = new Wrapper(new Box(1));
        root.getWrappers().add(wrapper1);

        Wrapper wrapper2 = new Wrapper(new Box(2));
        root.getWrappers().add(wrapper2);

        Wrapper wrapper3 = new Wrapper(new Box(3));
        root.getWrappers().add(wrapper3);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }


    @XmlElement(name = "wrapper")
    public List<Wrapper> getWrappers() {
        return wrappers;
    } 
    public void setWrappers(List<Wrapper> wrappers) {
        this.wrappers = wrappers;
    }

}

包含Box的包装类:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Wrapper {

    private Box box;

    public Wrapper(){

    }

    public Wrapper(Box box){
        this.box = box;
    }   

    public Box getBox() {
        return box;
    }
    public void setBox(Box box) {
        this.box = box;
    }

}

最后,Box类:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Box {

    private Integer number;

    public Box(){

    }

    public Box(Integer number){
        this.number = number;
    }   

    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }

}