首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 高效能開發實戰:XSLT TreeNode 模板遞迴渲染邏輯深度解析(下)

     編輯:關於C語言

TreeNode 模板參數與變數設計

TreeNode 模板接收 Level 參數(預設 0),表示當前節點層級。核心變數:

  • NodeID:節點唯一 ID,優先取 @ID,否則用 generate-id(.)。注意:generate-id() 僅在單一 XML 文件內唯一,跨文件(多棵樹、動態載入)會重複,故演示程式在 TreeViewNodeXML.aspx 中使用 Guid.NewGuid() 手動指定 ID,確保全域唯一。
  • ShowChildNode:$Level < 1 時為 1,控制初始化預設展開層數。
  • ChildCount:count(Nodes/Node) 緩存子節點數,避免重複計算。
  • HasChild:$ChildCount > 0 or string-length(XMLSource) > 0 判斷是否有子節點(含動態載入)。

HTML 結構生成邏輯

第一欄:樹狀連接線與展開/摺疊控制點

  • 有子節點:非最後同層節點設背景圖 SkyTreeViewControl_line.gif 模擬垂直連線;輸出展開/摺疊圖示(_expend),onclick 綁定 SkyTreeViewControlExpendNodeByID,src/SrcBack 雙屬性實現圖示切換,區分「最後節點」與「非最後節點」四種狀態圖示。
  • 無子節點:輸出葉節點連接線圖示(_child.gif / _lastchild.gif)。

第二欄:節點圖示與文字

  • 圖示(_icon):優先用節點 Icon 屬性,否則依 HasChild 與 ShowChildNode 顯示預設開合圖示(open.bmp/close.bmp),葉節點用 default.bmp。同樣綁定點擊展開事件。
  • 文字(_text):<a class="SkyTreeViewControl_TreeNode">,綁定 onclick 展開/高亮、可選 href 與 OnClick 腳本,若有 XMLSource 寫入擴充屬性供動態載入使用。

遞迴生成子節點

<xsl:if test="$ChildCount > 0">
  <table id="{$NodeID}_table" style="{if $ShowChildNode != '1'}display:none{/if}">
    <xsl:for-each select="Nodes/Node">
      <xsl:call-template name="TreeNode">
        <xsl:with-param name="Level" select="$Level + 1"/>
      </xsl:call-template>
    </xsl:for-each>
  </table>
</xsl:if>

動態載入預留載入提示

<xsl:if test="string-length(XMLSource) > 0">
  <span id="{$NodeID}_Loading" style="display:none" class="SkyTreeViewControl_TreeNode">
    <br/>正在載入<img src="..."/>
  </span>
</xsl:if>

此模板完整實現了樹狀結構的遞迴渲染、視覺連接線模擬、展開狀態管理與動態載入基礎設施的預埋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved