如何在JAXB中编组时避免根元素注释?

时间:2015-04-23 08:03:50

标签: java xml-parsing jaxb

我想将对象数据存储到XML。下面的代码spinets将显示模型类的示例。

Class Model
{
  @XmlElement
  private int id;
  @XmlElement
  Private string name;
} 

我将有多个模型对象,这些对象将存储在某个列表中,如下所示

@XmlRootElement
Class ModelWrapper
{
  @XmlElement
  @XmlJavaTypeAdapter(value = ListAdapter.class, type = List.class)
  List<model> list;
  public setlist(List<model>list)
  {
    //setting list
  }
  public List<model> getlist()
  {
    return list
  }
}

现在如果我使用JAXB对其进行编组,将产生类似的内容:

<Modelwrapper>
  <List>
  ......
  ......
  </List>
</Modelwrapper>

我想避免其中一个root可能是list或Modelwrapper。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

这样你的xml将是

<ModelWrapper>
   <model>
     ......
   </model>
   <model>
     ......
   </model>
</ModelWrapper>

ModelWrapper.java

@XmlRootElement
public class ModelWrapper {

    @XmlElement(name = "model")
    protected List<Model> list;

测试

ModelWrapper.java

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ModelWrapper", propOrder = {
    "list"
})
public class ModelWrapper {

    @XmlElement(name = "model")
    private List<Model> list;

    public List<Model> getList() {
        return list;
    }

    public void setList(List<Model> list) {
        this.list = list;
    }

}

Model.java

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Model", propOrder = {
    "id","name"
})
public class Model {
    @XmlElement
    private int id;
    @XmlElement
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

Main.java

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

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class Main {

    public static void main(String[] args) throws JAXBException {

        JAXBContext jc =  JAXBContext.newInstance(ModelWrapper.class);

        ModelWrapper mw = new ModelWrapper();

        List<Model> list = new ArrayList<Model>();
        Model m = new Model();
        m.setId(1);
        m.setName("model1");
        list.add(m);
        m = new Model();
        m.setId(1);
        m.setName("model2");
        list.add(m);

        mw.setList(list);

        Marshaller mar = jc.createMarshaller();

        mar.marshal(mw, System.out);


    }

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<modelWrapper>
    <model>
        <id>1</id>
        <name>model1</name>
    </model>
    <model>
        <id>1</id>
        <name>model2</name>
    </model>
</modelWrapper>