在本系统之中,网站的主体页面并不是通过普通的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 }