一种从数据库利用xml创建树型目录的方法(C#)(二)

一、 UI层处理:

#region 重新生成手机服务栏目列表 XML

private void CreateMetoneTree()

{

xmlDoc_Metone = new XmlDocument();

new Town.Com.MobileServiceTypeCollection().GetMetoneTree(out ds);

// 生成 根 节点

XmlElement treeContentElement = xmlDoc_Metone.CreateElement("NewDataSet");

xmlDoc_Metone.AppendChild(treeContentElement);

// 递归生成频道的 XML 文档

for(int j=0;j

  1<ds.tables["tree"].rows.count;j++) #endregion="" #region="" ;="" <="" <summary="" bulidxmltree(xmlelement="" continue;="" datarow="" ds.tables["tree"].rows.count;i++)="" else="" filename='Server.MapPath("Xml/MetoneTree.xml");' for(int="" i="" if(ds.tables["tree"].rows[i].itemarray[2].tostring()="tempRow.ItemArray[0].ToString())" if(int32.parse(ds.tables["tree"].rows[j].itemarray[2].tostring())="0)" location)="" private="" string="" temprow='ds.Tables["Tree"].Rows[location];' tempxmlelement,int="" tempxmlelement.appendchild(treeelement);="" this.appendchildelement("metoneid",temprow.itemarray[0].tostring(),treeelement);="" this.appendchildelement("metonename",temprow.itemarray[1].tostring(),treeelement);="" this.appendchildelement("metoneurl",temprow.itemarray[3].tostring(),treeelement);="" this.appendchildelement("parentmetoneid",temprow.itemarray[2].tostring(),treeelement);="" this.bulidxmltree(treecontentelement,j);="" this.bulidxmltree(treeelement,i);="" tree="" treeelement='xmlDoc_Metone.CreateElement("Tree");' void="" xml="" xmldoc_metone.save(filename);="" xmlelement="" {="" }="" 构="" 树="" 生成="" 节点="" 追加子节点="">
  2
  3///  追加子节点 
  4
  5/// 
  6
  7/// <param name="strName"/> 节点名字  
  8
  9/// <param name="strInnerText"/> 节点内容  
 10
 11/// <param name="parentElement"/> 父节点  
 12
 13/// <param name="xmlDocument"/>XmlDocument  对象  
 14
 15private void AppendChildElement(string strName , string strInnerText , XmlElement parentElement, XmlDocument xmlDocument ) 
 16
 17{ 
 18
 19XmlElement xmlElement = xmlDocument.CreateElement(strName) ; 
 20
 21xmlElement.InnerText = strInnerText ; 
 22
 23parentElement.AppendChild(xmlElement); 
 24
 25} 
 26
 27/// <summary>
 28
 29///  使用默认的频道  Xml  文档 
 30
 31/// </summary>
 32
 33/// <param name="strName"/>
 34
 35/// <param name="strInnerText"/>
 36
 37/// <param name="parentElement"/>
 38
 39private void AppendChildElement(string strName , string strInnerText , XmlElement parentElement ) 
 40
 41{ 
 42
 43AppendChildElement(strName,strInnerText,parentElement,xmlDoc_Metone); 
 44
 45} 
 46
 47#endregion 
 48
 49一点说明:感觉这些代码基本上都是自解释的,关键点都有注释,看看就明白的。 
 50
 51二、  解析xml的xslt 
 52
 53<?xml version="1.0" encoding="gb2312"?>
 54<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 55<xsl:output encoding="gb2312" indent="yes" method="xml" version="1.0"></xsl:output>
 56<xsl:template match="NewDataSet">
 57<xsl:apply-templates select="Tree"></xsl:apply-templates>
 58</xsl:template>
 59<xsl:template match="Tree">
 60<div ondragstart="return false" style="padding-left:20px;">
 61<xsl:attribute name="onclick">selectedEntity = '<xsl:value-of select="MetoneID"></xsl:value-of>';clickOnEntity(this);redirect('<xsl:value-of select="MetoneUrl"></xsl:value-of>');</xsl:attribute>
 62<xsl:attribute name="open">false</xsl:attribute>
 63<xsl:attribute name="id">
 64<xsl:value-of select="MetoneID"></xsl:value-of>
 65</xsl:attribute>
 66<xsl:attribute name="STYLE">
 67<xsl:if test="count(ancestor::node()) &gt; 2">
 68
 69display: none; 
 70
 71</xsl:if>
 72
 73cursor: hand; 
 74
 75</xsl:attribute>
 76<table border="0" cellpadding="0" cellspacing="0" style="line-height:130%">
 77<tr>
 78<td>
 79<a href="{MetoneUrl}" target="main"><xsl:value-of select="MetoneName"></xsl:value-of></a>
 80</td>
 81</tr>
 82</table>
 83<xsl:apply-templates select="Tree"></xsl:apply-templates>
 84</div>
 85</xsl:template>
 86</xsl:stylesheet>
 87
 88三、  一个小技巧:用js把xml的数据用xslt解析后填充到固定的html块中,比如div,调用代码:  initAdmin('MetoneTree.xml', 'submenu','MetoneTree.xslt')  ,js代码如下: 
 89
 90var view;//  中英文版本切换 
 91
 92var xmlDoc;//MSXML2.DOM  对象 
 93
 94var selectedEntity;//  选中接点  ID  号 
 95
 96function initAdmin(fileName, divTree,xsltFile, expID)//  初始化树状结构 
 97
 98{ 
 99
100var xslDoc; 
101
102var strXml; 
103
104var objXml; 
105
106var xmlHttp; 
107
108var xslProc; 
109
110var xslTemplate; 
111
112//alert(fileName); 
113
114xmlDoc = new ActiveXObject("MSXML2.DOMDocument"); 
115
116xmlDoc.async = false; 
117
118xslDoc = new ActiveXObject("MSXML2.FreeThreadedDOMDocument"); 
119
120xslDoc.async = false; 
121
122xmlDoc.load("XML/"+fileName); 
123
124xslDoc.load("XSLT/"+xsltFile); 
125
126xslTemplate = new ActiveXObject("MSXML2.XSLTemplate"); 
127
128xslTemplate.stylesheet = xslDoc; 
129
130xslProc = xslTemplate.createProcessor(); 
131
132xslProc.input = xmlDoc; 
133
134xslProc.transform(); 
135
136document.all[divTree].innerHTML = xslProc.output; 
137
138if(expID != null) 
139
140{ 
141
142expandSome(document.all[expID]); 
143
144} 
145
146} 
147
148四、  如果有不明白的msn上提问好了,msn:  [email protected]  ,文中要有疏漏之处请多指教。</ds.tables["tree"].rows.count;j++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus