在本系統之中,網站的主體頁面並不是通過普通的aspx返回方式返回的,而是采用一種XML+XSLT的形式,來自生成,這是我個人比較喜歡的方式,這種方式在這個系統之中有著更好的優勢,我現在將優勢列舉幾條:
1.完整的實現數據和表現形式的分離,數據完全在XML文件之中實現,而頁面的表現的形式完全用XSLT實現,這樣使程序的結構清晰簡單,易於維護;
2.可以隨意的選擇將結果輸出到文件或者Response;
3.XSLT可以自動的壓縮HTML代碼,生成緊湊,不易閱讀而不影響浏覽器解析的代碼,你在XSLT文件之中的注釋也不會顯示到客戶端,除非你特意指明;
4.XSLT允許相互調用,這樣就可以實現比較容易更新和維護的架構;
5.XSLT要實現網站完全換膚非常容易,容易到你可能覺得他們設計XSLT就是用來做換膚,可以將網站變成一個風格完全不同的網站,而不是普通的CSS換膚就是換一個顏色主體而已。
缺點也要列舉一條(相當重要):XSLT使用的人可能不是太多,學習起來也有一定的難度,這個是最大的障礙。
使用xml+XSLT來架構網站是很清晰的,首先創建一個XmlDocument對象,然後再通過規范的格式向XML之中填充數據,再打開XSLT文件,通過該XSLT文件轉化XML,並將結果直接輸出到Response即可,以下是XSLT輸出的代碼:
1protected void saveFile(XmlDocument xml,string xsltFile)
2{
3 XslTransform xslt=new XslTransform();
4 xslt.Load(Server.MapPath(XsltFilePath)+xsltFile);
5 xslt.Transform(xml,null,Response.OutputStream,null);
6 writer.Close();
7}
關於如何將數據填充到XML數據之中,不是本文要講述的內容,不過,我可以提供一種思路,那就是使用SQL語句之中的For Xml語句,方法是在你的查詢語句之後添加 for xml auto語句段,這樣SQL Server返回的數據將是XML節點形式,然後你使用如下函數將返回結果導入到你的XML節點之中:
1 protected void GetXmlBySql(XmlNode xmlNode,string sql,SqlConnection conn)
2 {
3 SqlCommand sqlCommand=new SqlCommand(sql,conn);
4 XmlTextReader xmlTextReader=(XmlTextReader)sqlCommand.ExecuteXmlReader();
5 xmlTextReader.Normalization=true;
6 try
7 {
8 while(!xmlTextReader.EOF)
9 {
10 XmlNode tempXmlNode=xmlNode.OwnerDocument.ReadNode(xmlTextReader);
11 if(tempXmlNode!=null)
12 xmlNode.AppendChild(tempXmlNode);
13 }
14 }
15 catch(Exception e){}
16 xmlTextReader.Close();
17 sqlCommand.Dispose();
18 }