JAXB向集合元素添加属性

时间:2019-08-26 06:49:49

标签: java xml jaxb

我有一个看起来像这样的课

@XmlRootElement(name="root")
public class MyClass {

@XmlElementWrapper(name="list")
@XmlElement(name="item")
private List<String> myList = new ArrayList<String>();

// getters, setters
}

我想向列表元素添加一个属性a以达到以下XML

<root>
  <list a="1">
    <item>a</item>
    <item>b</item>
    ...
  </list>
</root>

1 个答案:

答案 0 :(得分:0)

您可以为此列表创建另一个类,如下所示:-

import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement(name="list")
public class RootList {

    private String a;
    private List<String> someList;

    @XmlAttribute(name="a")
    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    @XmlElement(name="item")
    public List<String> getSomeList() {
        return someList;
    }

    public void setSomeList(List<String> someList) {
        this.someList = someList;
    } 

    public RootList(String numValue,List<String> someListValue) {
        this();
        this.a = numValue;
        this.someList = someListValue;  
    }

    public RootList() {
        // TODO Auto-generated constructor stub
    }
}

要使用JAXB运行上述代码,请使用以下代码:

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.*;

public class Test {

        public static void main(String[] args) throws Exception {
            List<String> arg = new ArrayList<String>();
            arg.add("a");
            arg.add("b");
            RootList root = new RootList("1", arg);

            JAXBContext jc = JAXBContext.newInstance(RootList.class);
            Marshaller marshaller = jc.createMarshaller();
            marshaller.marshal(root, System.out);
        }
}

它将生成以下XML作为输出:

<list a="1">
    <item>a</item>
    <item>b</item>
</list>