XML作为Vaadin树的数据源

时间:2011-11-11 07:33:07

标签: java xml tree vaadin

我正在开发一个小项目,在这个项目中,我必须显示Vaadin树中XML Source /文件的一些数据。

我的问题是:我可以用Vaadin树做到这一点吗?它是如何“难以”实现它的?

我看过他们都使用容器作为源的Vaadin演示树,所以不知道它是否适用于XML。

我是XML和Java的新手,因此可以免费发布一些有用的指南/链接

1 个答案:

答案 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只显示一个属性。