有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXB向集合元素添加属性

我有一门课看起来像这样

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

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

// getters, setters
}

我想向列表元素添加一个属性,以访问以下XML

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

共 (1) 个答案

  1. # 1 楼答案

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

    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>