2
有人可以幫助我改進嗎?一定有更好的方法。我正在做的是構建一個本地Web服務,以便爲了填充樹菜單而獲取flex。作爲我稱爲Web服務的應用程序的Flex只是一些背景,但與問題無關。使用ColdFusion創建分層xml結構
爲了爲這棵樹創建分層數據,我編寫了以下代碼。
<cffunction name="getFormsBinMenu" access="remote" returntype="string">
<cfquery name="getParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = 1 ORDER BY sortorder ASC
</cfquery>
<cfoutput>
<cfxml variable="formsBinMenu">
<?xml version='1.0' encoding='utf-8' ?>
<folder label="Forms Bin">
<cfloop query="getParents">
<folder label="#XMLFormat(getParents.catname)#">
<cfquery name="getSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getSubParents">
<folder label="#XMLFormat(getSubParents.catname)#">
<cfquery name="getNextSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getNextSubParents">
<folder label="#XMLFormat(getNextSubParents.catname)#"/>
</cfloop>
</folder>
</cfloop>
</folder>
</cfloop>
</folder>
</cfxml>
</cfoutput>
<cfset menu = #toString(formsBinMenu)#>
<cfreturn menu>
</cffunction>
正如你所看到的,我只是循環不同的查詢。雖然這適用於我的目的,但我怎麼編碼它,以便沒有太多的代碼重複?
我想過檢查看結構會有多少層次,然後在索引循環中運行它,但仍然看起來太多開銷。
任何建議將是偉大的!
我似乎無法讓你的代碼工作。必須是我沒有抓住的東西。這是我的結果:<?xml version =「1.0」encoding =「UTF-8」?> –
2011-02-28 22:14:11
@Robb - 我的表中有parentID爲null的項目是根節點。注意isnull將parentID設置爲0,則 。你使用什麼版本的Coldfusion? –
2011-02-28 22:26:01
9標準。當我轉儲rawNodeTree時,它正在傾銷我所期望的所有reocrds。只是一個示例: –
2011-02-28 22:28:15