Step1数据系统技术(2.XML+XSLT的页面生成机制)
在本系统之中,网站的主体页面并不是通过普通的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输出的代码:
关于如何将数据填充到XML数据之中,不是本文要讲述的内容,不过,我可以提供一种思路,那就是使用SQL语句之中的For Xml语句,方法是在你的查询语句之后添加 for xml auto语句段,这样SQL Server返回的数据将是XML节点形式,然后你使用如下函数将返回结果导入到你的XML节点之中:
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输出的代码:
1
protected 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
}

2

3

4

5

6

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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

posted on 2007-11-29 00:04 K_Reverter 阅读(746) 评论(4) 收藏 举报