2011-11-11 25 views
4

有一個小型項目即時通訊工作,在這個項目中,我必須顯示一個Vaadin樹中的XML源/文件的一些數據。XML作爲一個Vaadin樹的數據源

我的問題是:我可以用Vaadin樹來做到這一點嗎?它會如何「實現」它?

我已經看過Vaadin演示樹,他們都使用Containers作爲源,所以不知道它是否可以使用XML。

林在新的XML和Java這樣下跌免費發佈一些有用的指南/鏈接

回答

8

有proablably很多java庫在那裏處理XML。只需拿一個,比如XOM,然後將其轉換爲HierarchicalContainer。

例如,服用XML閱讀例子在這裏找到:http://bethecoder.com/applications/tutorials/xml-xom-read-xml.html並將其轉換爲一個IndexedContainer:

<?xml version="1.0"?> 
<students> 
    <student> 
     <name>Sriram</name> 
     <age>2</age> 
    </student> 
    <student> 
     <name>Venkat</name> 
     <age>29</age> 
    </student> 
    <student> 
     <name>Anu</name> 
     <age>28</age> 
    </student>  
</students> 

我們現在可以修改代碼,而與數據扔進容器:

Builder builder = new Builder(); 
InputStream ins = ReadXML.class.getClassLoader() 
     .getResourceAsStream("student_list.xml"); 

//Reads and parses the XML 
Document doc = builder.build(ins); 
Element root = doc.getRootElement(); 

IndexedContainer container = new IndexedContainer(); 
container.addContainerProperty("name", String.class, null); 
container.addContainerProperty("age", Integer.class, null); 
//Get children 
Elements students = root.getChildElements(); 
for (int i = 0 ; i < students.size() ; i ++) { 
    System.out.println(" Child : " + students.get(i).getLocalName()); 
    Object student = container.addItem(); 
    Item studentItem = container.getItem(student); 

    //Get first child with tag name as 'name' 
    Element nameChild = students.get(i).getFirstChildElement("name"); 
    if (nameChild != null) { 
    studentItem.getItemProperty("name").setValue(nameChild.getValue()); 
    } 
    Element ageChild = students.get(i).getFirstChildElement("age"); 
    if (ageChild != null) { 
     studentItem.getItemProperty("age").setValue(ageChild.getValue()); 
    } 
} 

現在可以將indexedcontainer插入表或樹中。如果在xml中有一個樹格式,可以將其更改爲HierarchicalContainer,並在容器上使用setParent。如果你想顯示多個屬性,你必須使用TreeTable而不是Tree,因爲Tree只顯示一個屬性。