[多級分類樹設計] 如何將取得controller層返回的list以生成XML格式的數據
前段時間寫了篇關于多級分類樹的設計:http://www.aygfsteel.com/davidxu/archive/2005/08/17/multilevelTree.html
有網友問到如果將取得的list數據生成為XML格式的數據
以方便js 解釋。在這里另起一筆。簡單介紹,供大家參考一下 :)
筆者簡單做一個demo
1、最快搭起示范例子





















執行以上代碼可以發現生成的文件內容將會為以下所示
<?xml version="1.0" encoding="GBK" ?>
<tree text="中國" />
<tree text="華南地區" />
<tree text="廣東" />
<tree text="廣西" />
<tree text="華北地區" />
</tree>

</tree>

2、例子存在問題
很容易發現,以上的辦法并不是我們所期待的,根本沒有等級劃分:(
再來看我們其實想實現的效果應該如下, [筆者加了注釋以方便說明問題]





<tree text="廣西"></tree> //3 關閉
</tree> // 再一次關閉


<tree text="筆者虛擬的,并不存在" / > //1

3、找尋規律
節點何時關閉?????這是關鍵的………………
如果你認真地觀察(可能更多的數據會更清楚),很快就可以看到規律了.
如上面注釋所示:
"中國" -> "華南地區" 1-> 2 (2>1,不關閉)
"華南地區" -> "廣東 " 2->3 (3>2 ,不關閉)
"廣東" -> "廣西 " 3->3 (3=3 ,關閉1 次)
"廣西" -> "華北地區 " 3->2 (3<2 ,關閉 2 次)
最后:華北地區后就沒有了,
我們可以模擬一個最高級別的區域,可以想象"華北地區"下一個就是最高級別的區域
'華北地區' - >' 筆者虛擬的,并不存在' 2->1 (2<1 關閉2 次)
當下一個區域的級別(LEVEL)高于或等于當前區域(數值上相反,小于上一個區域) 的時候,當前區域就應該關閉N次,公式表示為 N * </tree> ,至于N等于多少,即取決于下一個區域的級別與當前區域的級別的差距.
3-3 = 0 關閉一次
3-2 =1 關閉二次
…………
…………
如果你愿意,可以增加更多等級的區域,以確認有這樣的一種規律:
N = (上一個級別 - 下一個級別) + 1
前提是下一個級別 <= 上一個級別
源代碼

private void closeNodes(JspWriter out,int nowLevel,int oldLevel) throws Exception




















































// 最后一級別為最高 1




寫得比較快,歡迎查bug : )
(本文完)