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输出的代码:

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 }

时间: 2024-09-30 21:02:44

Step1数据系统技术(2.XML+XSLT的页面生成机制)的相关文章

Step1数据系统技术(0.开篇介绍)

好久没有写文章了,前天写了一篇关于Google的介绍的文章,也只是随便的写一下,不过眼下我准备写一个系列文章,来介绍我在Step1网站开发上的一些心得和技术,包括相关的代码. 这一系列文章介绍的技术主要来自www.step1.cn的两个栏目地名信息系统和火车运行图,您最好先浏览一下这两个栏目,这样才能够更加了解我的设计思路. 在开始之前,我来简单的说明一下这两个系统的共同点,以让大家了解究竟什么样的系统更适合使用我介绍的技术. 第一,该系统必须有一套数据,而且数据的容量也要大一点,要不然使用这些

Step1数据系统技术(5.使用GZIP技术优化文件缓存)

在上面的一篇,我们讲到了服务器端的缓存,我的地名信息系统有70万个页面,生成该页面的过程需要我从远程的数据库加载5个SQL数据返回的内容,还有RSS格式的新闻,因此生成一个页面是很困难的,因此我使用了服务端缓存技术使性能获得了大幅的提升,不过,又遇到了新的关于硬盘空间和流量的问题. 网站的70万个地名当然不会一天之内都会被访问,不过我的网站该栏目日访问量大约为30000,考虑到重复的访问,假设只访问了10000个地名(实际上是不只的,因为地名的访问很零散),那就是会有10000个缓存文件被生成,

Step1数据系统技术(4.采用服务器端文件缓存)

前一章介绍了Cache和http状态码304的技术,这属于服务器端文件缓存,使用该技术可以灵活的将每一个用户访问服务器的次数和字节数减少到最低. 不过有这样一个问题存在,就是上面的缓存都是针对单个用户的,如果该用户通常在缓存时间内只访问该文件一次,是没有效果的,因此就算这个文件每天被再多的用户访问,也起不到缓存效果,而这种情况下需要使用服务端缓存. 使用服务端缓存的理由很多,我使用的主要理由是每个页面生成对服务器性能的要求过大,因为每个页面生成的过程序需要多次访问数据库,并有可能需要从别的来源获

Step1数据系统技术(1.基于404错误的URL重写技术)

现在第一篇,讨论我的网站之中使用的URL重写技术,实际上,该技术并不是我编写的,可能有用户能够记得,我的网站www.step1.cn原来就是一个博客,那个时候采用的系统是博客园提供的cnblogs程序(我将这个程序改装成能够在当时的虚拟主机上运行,可花了不少功夫),后来我将博客迁到这里之后,对Step1.cn进行大的改版,当时我实在舍不得这套博客程序之中使用的URL重写的技术,因此专门的从那个cnblogs程序之中将相关的代码从其中拆分出来成一个DLL类,在我的网站使用URL重写技术. 当时由于

Step1数据系统技术(6.汉字URL路径的处理和编码)

其实我挺不想写这一章的,因为直到现在,我还经常为编码的事情弄得云里雾里,不过考虑到我在之前的这个文章系列的目录里面已经列出了这个主题,如果不写有欺骗的嫌疑,想想还是写吧,反正没有谁把我当作一个权威的. 编码问题向来很复杂,我却不愿意向复杂了讲,我只从比较常见的讲. 编码,实际上是一个字符串的表达方式,通常从URL编码来讲,我们最常见到的编码有两种:第一种是GB2312编码,这是百度搜索使用的一种编码形式,例如你在百度搜索一个"你好",你会看到搜索结果网址是http://www.baid

Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)

实在抱歉,因为本来这个系列应该早就应该写完的,不过在我写了两章之后,没有过多久,我的网站就崩溃了,崩溃的原因是有人试图从我的网站抓取数据,从而造成了网站数据库的频繁访问,如果大家看过我以前的几篇,应该知道发生这样的事情同样会造成服务器缓存文件过多,因为我使用的是虚拟主机,因此,服务器就崩溃了.因此我觉得这个系统还存在缺陷,因此暂时没有继续介绍(当然到现在也没有改善多少),之后就是春节,春节之后我就开始找工作,而且也一直没有心情来写这个,因此拖延了很久,到现在,我终于觉得不好意思了,决定不管是否完

一起谈.NET技术,关于ASP.NET页面打印技术的总结

B/S结构导致了Web应用程序中打印的特殊性. • 程序运行在浏览器中,打印机在本地,而文件确可能在服务器上,导致了打印控制不是很灵活. • 格式如何控制和定制等,是我们开发中可能会面对的问题. 打印文档的生成 • 1.客户端脚本方式 一般情况下,主要使用JS 可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印.通过分析源文档的内容,可以生成打印目标文档. 优点:客户端独立完成打印目标文档的生成,减轻服务器负荷; 缺点:源文档的分析操作复杂,并且源文档中的打印内容要有约定. • 2.服务

Jsp结合XML+XSLT将输出转换为Html格式

js|xml|转换 我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成html输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用Jsp 加上tablib标识库,我们可以完成这种转换. 著名open source项目组jakarta.apache.org推出的系列标识库中,就有这个功能的tanglib:http://jakarta.apache.org/ta

Sparks.com用XML和XSL来生成动态页面

xml|动态|页面 XML(可扩展标记语言)看起来可能像某种W3C标准--现在没有什么实际影响,即使以后能派上用场,也是很久以后的事.但实际上,它现在已经得到了应用.所以,不要等到XML已被加进了你最喜爱的HTML编辑器中才开始使用它.它现在就可以解决各种内部问题和B2B系统问题. 在Sparks.com,我们使用XML来标准化从Java对象到HTML数据显示等不同系统之间的数据表示. 特别需要指出的是,我们发现,只要以非常基本的XML结构来实现标准化,就可以更容易地共享和操作数据.在这一过程中