2013-06-13 19 views
0

我正在Vaadin中執行一個項目,並需要執行以下操作。我做了一個服務器請求,並得到一個XML字符串作爲迴應。而且,我對這個XML文件在運行時的外觀一無所知。我需要將此XML字符串轉換爲vaadin樹。將XML字符串加載到Vaadin樹中

我看到一些答案,他們說加載到一個HierarchicalContainer和所有,但我無法理解它。

請幫幫我!

回答

3

如果你不想使用HierarchicalContainer(我有沒有經驗),你可以解析XML文檔遞歸這樣的:Recursive XML-parser

然後,只需添加項目,並設置父。事情是這樣的:

@Override 
protected void init(VaadinRequest request) { 
    Tree tree = new Tree(); 
    setContent(tree);  
    try { 
     File fXmlFile = new File("C:\\temp\\sample.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     Element root = doc.getDocumentElement(); 
     Object rootItem = root.getNodeName(); 
     tree.addItem(rootItem); 
     addChildrenToTree(tree, root.getChildNodes(), rootItem); 
    } catch (Exception e) { } 
} 

private void addChildrenToTree(Tree tree, NodeList children, Object parent) { 
    if (children.getLength() > 0) { 
     for (int i = 0; i < children.getLength(); i++) { 
      Node node = children.item(i); 
      Object child = node.getNodeName(); 
      tree.addItem(child); 
      tree.setParent(child, parent); 
      addChildrenToTree(tree, node.getChildNodes(), child); 
     } 
    } 
} 
+0

所以,通常在一個特定的樹我最後的XML元素的形式的。現在,我想把酒吧當成foo的孩子。 foo沒有任何其他的孩子。我將這段代碼添加到了else if else in addChildrenToTree 'tree.addItem(parent.getTextContent()); tree.setParent(parent.getTextContent(),parent.getNodeName());' 是的,我通過父母作爲一個元素,而不是一個字符串。請幫助:) – pratnala

+0

看起來像這個值也被認爲是一個節點,所以試試if(children.getLength()> 1){...} else {<你發佈的內容>} – kris54321