2012-12-05 50 views
4

我有林從我類XML解析和反序列化

<Testclasses> 
<Class>new SomeClass1()</class> 
<class>new SomeClass2()</class> 
</Testclasses> 

閱讀它一個XML文件,所以我具有其中需要一個參數作爲對象,如下所述類中的方法

public List<Object> retriveValuesFromXml(){ 
    .... 
    This method parses the values from xml and reads the different object and returns a 
    list of objects. 
} 

@Test 
public void someMethod1(){ 

    ArrayList<Object> list_of_objects= retriveValuesFromXml(); 

    for(Object x :list_of_objects){ 
     someMethod2(x); //for example : x = new SomeClass1() or x = new SomeClass2() 
    } 
} 

public void someMethod2(Object target){ 
    ..... 
} 

其中target是創建的新SomeClass()對象,我們正在從xml中讀取。我可以知道如何解析文件中的xml值作爲對象並將其存儲在列表中嗎?我只想在我的項目中使用所有類對象的列表,並將它們發送給此測試類。後來,即使任何新類被添加到項目中,我應該能夠添加到此xml文件並將類對象傳遞給此測試。

回答

6

您可能想要使用簡單的Java庫,例如XStream,它非常易於使用。您只需定義一個POJO類來保存來自XML的解析值,然後使用該庫來解析XML併爲您生成轉換後的java對象。

 XStream xstream = new XStream(); 

    //converting object to XML 
    String xml = xstream.toXML(myObject); 

    //converting xml to object 
    MyClass myObject = (MyClass)xstream.fromXML(xml); 

請看看它的two minutes tutorial

+0

這個庫是好的,當且僅當命名慣例遵循對象命名的變量。如果您的元素如 ...?你是否需要用破解java命名約定的全部大寫命名你的pojo?或者你可以使用註釋來表示? – Churk

3

它類似的東西,我想

DocumentBuilder db = dbf.newDocumentBuilder(); 
org.w3c.dom.Document doc = db.parse("name_of_file.xml"); 

Element rootElement = doc.getDocumentElement(); 
NodeList nl=rootElement.getElementsByTagName("TestClass");