2012-06-08 19 views
1

我正在考慮像時尚一樣在toString()中編寫一個方法,以便它返回類實例的XML表示。創建從下到上的類實例的XML表示?

首先,我想將它寫像

public Element toElement() { 
    // create Element instance and fill it 
} 

但我無法創建內部空Element例如,由於Element創建需要Document實例來調用它的createElement()

所以我重寫方法

public Element toElement(Document doc) { 
    Element ans = doc.createElement("myclasstag"); 

    // filling ans 

    return ans; 
} 

但後來我得到了運行時異常HIERARCHY_REQUEST_ERR,因爲直到它被連接到父層次一個無法填補Element實例。

所以我重寫方法如下

public Element toElement(Document doc, Element parent) { 

    Element ans = doc.createElement("myclasstag"); 
    parent.appendChild(ans); 

    // filling ans 

    return ans; 
} 

但這種方式,我不需要回答,因爲它已經連接的地方應該是,所以它成了

public void append(Document doc, Element parent) { 

    Element ans = doc.createElement("myclasstag"); 
    parent.appendChild(ans); 

    // filling ans 
} 

這是現在絕對不喜歡toString()

是否有可能創建像從一樣的從頭到腳的XML實例呢?

+2

你可以但它是很多工作。這就是爲什麼像XStream或JAXB這樣的東西存在,所以你不必這樣做。 –

回答

1

使用XStream,我可以這樣做:

package com.adarshr; 

import com.thoughtworks.xstream.XStream; 


class Parent { 
    private String name; 
    private int age; 

    public Parent(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 
} 

public class Test { 
    private Parent parent = new Parent("Abcd", 30); 

    public static void main(String[] args) throws Exception { 
     System.out.println(new Test()); 
    } 

    @Override 
    public String toString() { 
     return new XStream().toXML(this); 
    } 
} 

它打印:

<com.adarshr.Test> 
    <parent> 
    <name>Abcd</name> 
    <age>30</age> 
    </parent> 
</com.adarshr.Test> 

當然,它是完全可定製的。