我正在开发一个小项目,在这个项目中,我必须显示Vaadin树中XML Source /文件的一些数据。
我的问题是:我可以用Vaadin树做到这一点吗?它是如何“难以”实现它的?
我看过他们都使用容器作为源的Vaadin演示树,所以不知道它是否适用于XML。
我是XML和Java的新手,因此可以免费发布一些有用的指南/链接
答案 0 :(得分:8)
有很多可用于处理xml的java库。只需取一个,例如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只显示一个属性。