logo头像

Edward.K Thinking

動態產生Web.sitemap檔案

一般要在網站上使用Web導覽列,使用SiteMapPath控制項並且搭配Web.sitemap便可以製作出網站導覽列。只要在Web.sitemap建立相對應好的XML檔就可以,但是,若是這些導覽列屬於變動型,每次有變動就要在對Web.sitemap檔案,進行更新也是很麻煩的。因此,把相對的功能與功能頁面連結放入資料庫中,然後動態產生此Web.sitemap檔案,便可以隨時變動Web.sitemap內容符合網站需求

建立XML Writer


1
2
3
string strPathName = Server.Path("\\") + "Web.sitemap";
Encoding oENC = Encoding.UTF8;
XmlTextWriter oXML = new XmlTextWriter(strPathName, oENC);

建立主節點

1
2
3
4
XML.WriteStartDocument();                
oXML.WriteStartElement("siteMap");
oXML.WriteStartElement("siteMapNode");
oXML.WriteAttributeString("title", "目前位置");

建立第二節點

1
2
3
oXML.WriteStartElement("siteMapNode");
oXML.WriteAttributeString("title","首頁");//Title attribute set,Second Level
oXML.WriteAttributeString("url", "Default.aspx");

從資料庫讀取動態資料結點資料,若是多層架構就需要用多層迴圈做新增節點

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

for (int i = 0; i < dt.Rows.Count; i++)
{
if (! int.Parse(dt.Rows[i]["AID"].ToString()).Equals(dFirst))//值不相等則表示子節點為不同主節點
{
if (i > 0)//一開始進入不可結束子節點
{
oXML.WriteEndElement();//Close the siteMapNoded
}
oXML.WriteStartElement("siteMapNode");
oXML.WriteAttributeString("title", dt.Rows[i]["AIDName"].ToString());//建立節點
dFirst = int.Parse(dt.Rows[i]["AID"].ToString());
}
oXML.WriteStartElement("siteMapNode");//建立第二節點
oXML.WriteAttributeString("title", dt.Rows[i]["BIDName"].ToString());
oXML.WriteAttributeString("url", dt.Rows[i]["BIDUrl"].ToString());
oXML.WriteEndElement();//結束子節點 Element
}
oXML.WriteEndElement();

結束所有節點

1
2
3
4
5
 oXML.WriteEndDocument();
oXML.Flush();

oXML.Close();
oXML = null;

上一篇