2011-02-24 23 views
7

Ben şuna benzer XML oluşturmak istiyorum:JAXB: XmlElementWrapper iç içe düğümler

<mainNode> 
     <node1></node1> 
     <node2></node2> 
    </mainNode> 
    <mainNode2></mainNode2> 

ve benim kodunda mainNode1, mainNode2 ve Düğüm1 oluşturmak nasıl şudur:

@XmlElementWrapper(name = "mainNode") 
     @XmlElement(name = "node1") 
     public List<String> getValue() { 
      return value; 
     } 

    @XmlElement(name = "mainNode2") 
    public String getValue2() { 
    return value2; 
    } 

nasıl ben node2'yi mainNode1'e ekleyebilir miyim?

cevap

5

Örneğinizde kök öğeniz yok gibi görünüyor.

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
class Node { 
    private MainNode mainNode; 
    private MainNode2 mainNode2; 

    public Node() { 
    } 

    public Node(MainNode mainNode, MainNode2 mainNode2) { 
     this.mainNode = mainNode; 
     this.mainNode2 = mainNode2; 
    } 

} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
class MainNode { 
    private String node1; 
    private String node2; 

    public MainNode() { 
    } 

    public MainNode(String node1, String node2) { 
     this.node1 = node1; 
     this.node2 = node2; 
    } 

} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
class MainNode2 { 

} 

İşte benim test kod: - -: İstediğiniz yapı elde etmek için böyle bir şey yapabileceğini

JAXBContext jc = JAXBContext.newInstance(Node.class); 
Marshaller m = jc.createMarshaller(); 

MainNode mainNode = new MainNode("node1 value", "node2 value"); 
MainNode2 mainNode2 = new MainNode2(); 
Node node = new Node(mainNode, mainNode2); 

StringWriter sw = new StringWriter(); 

m.marshal(node, sw); 

System.out.println(sw.toString()); 

... ve burada çıktı verilmiştir: -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<node> 
    <mainNode> 
    <node1>node1 value</node1> 
    <node2>node2 value</node2> 
    </mainNode> 
    <mainNode2/> 
</node> 
7

XmlElementWrapper, yalnızca wrapperElement öğesinin aynı türde öğelerin bir listesi olduğunda kullanılmalıdır.

<node> 
    <idList> 
     <id> value-of-item </id> 
     <id> value-of-item </id> 
     .... 
    </idList> 
</node> 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
class Node { 
    @XmlElementWrapper(name = "idList") 
    @XmlElement(name = "id", type = String.class) 
    private List<String> ids = new ArrayList<String>; 
//GETTERS/SETTERS 
}