2011-02-24 7 views
7

나는 다음과 같이 XML 생성하려면 :JAXB : XmlElementWrapper 중첩 노드

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

를하고 난 내 코드에서 mainNode1, mainNode2 및 노드 1을 생성하는 방법이 있습니다 :

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

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

어떻게 node2를 mainNode1에 추가 할 수 있습니까?

답변

5

예제에 루트 요소가없는 것 같습니다.

@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 { 

} 

여기 내 테스트 코드입니다 : - - : 당신은 당신이 원하는 구조 얻기 위해 이런 식으로 뭔가를 할 수

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()); 

을 ... 그리고 여기에 출력입니다 : -

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

XmlElementWrapper는 wrapperElement에 같은 유형의 요소 목록이있는 경우에만 사용해야합니다.

<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 
}