從XML

2011-02-23 55 views
0

創建樹結構我有一個像從XML

<rootXml> 
    <category id="1" name="Dept 1" folderPath="/css" leftHt="400" 
     leftWd="50" rightHt="400" rightWd="50"> 
     <category id="2" name="Service 1" folderPath="/news/world"></category> 
     <category id="3" name="Service 2" folderPath="/news/local"></category> 
     <category id="4" name="Service 3" folderPath="/news/crime"></category> 
     <category id="5" name="Service 4" folderPath="/news/humaninterest"></category> 
    </category> 
</rootXml> 

一個XML我想創建JSP樹形結構顯示像

​​

基本點擊父節點上其子應顯示..

我以前使用道場,但其相當沉重,並希望通過我自己的代碼來開發它。我有所有的數據與我的XML的DOM對象,如何繼續下一步?

回答

0

創建數據模型(如果您還沒有)。看來你需要一流的範疇與字段名稱,FOLDERPATH等 此外,它應該包含類別的集合:

private Collection<Category> = new ArrayList<Category>();

現在使用DOM API來遍歷節點,創建分類對象,並將其添加到父。您應該使用類似堆棧的結構:當您看到類別標記時,創建對象並將其添加到堆棧。然後遍歷內部標籤。當您遇到類別標籤時再次創建對象,從堆棧中獲取父類別並將當前類別添加到父類別。

或者,您可以實現遞歸方法,該方法接收DOM當前父元素作爲參數。

但爲什麼要做這一切?使用像Digester或JAXB這樣的高級工具,幾乎可以免費完成您所需要的一切!

0

嗯,基本上,你已經有了一個DOM樹

一棵樹如果你想在例如一個數組結構,你應該這樣做是這樣的:

// lets say that obj is the <rootXml> object - the root of the tree 

    function makeTree(obj){ 
     var a = ob.childNodes; 
     if(a.length == 0) return obj; 

     var tree = []; 
     for(var i in a){ 
     if(a.childNodes.length > 0) // if it has children -> it is a node 
      tree.push(makeTree(a[i])); 
      else // it doesn't have any children -> it is a leaf 
      tree.push(a[i]); 
     } 

     return tree; 
    } 

    var tree = makeTree(obj); 

而這如何遞歸創建子樹