3.更易于搜索引擎收录。首先就是此方案可以被搜索引擎收录,而Ajax方案的弊端就在这里;其次,搜索引擎喜欢冗余少的网站,这会一定程度上影响网站排名,而XML数据最为符合这一要求;再者,网址较为友好,这是相对MVC而言的,具体原因可参看我此前发表的一篇文章。
4. 更容易在其他客户端中使用。这一点Ajax方案也同样优秀,MVP方案实现起来有些困难,其他的方案都难以实现。
弊端
没有完美的事物,此方案弊端如下:
1. 更高的技术要求。显然相比以往的方案,此方案需要开发者掌握更多知识,并组合应用。
2.更高的客户端负荷。XSLT加重了客户端的处理压力,虽然我们大都觉得客户端的运算资源负荷是一个可以忽视的问题,从而将尽可能多的运算放到客户端,但并不是所有客户都使用中高端的机器,尤其是对一些上网本用户而言,JS已经让他们头疼了。
3.更差的兼容性。HTML、JS、CSS在各个浏览器上本就有些兼容性问题,现在XSLT又掺合进来,开发者面临的问题更为严峻。并且对于移动客户端、盲人阅读器及其他非常规客户端而言,XSLT是否会被解析都是个疑问。
范例
现在演示一个网站范例。
首先建立一个数据库,这里使用的Accesee2000-2003数据库,命名为Database.mdb,在其中建立User表:
添加一个ashx文件,名为Default.ashx:
输入以下代码: <%@ WebHandler Language="C#" Class="Default" %>using System; using System.Web; using System.Data.OleDb; usingSystem.Data; using System.Xml; public class Default : IHttpHandlerpublic void ProcessRequest(HttpContext context) OleDbConnection c =newOleDbConnection(string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=""0"";PersistSecurityInfo=True",HttpContext.Current.Server.MapPath(@"~\App_Data\Database.mdb")));var ds = new DataSet(); //获取Url中的max参数 var max = 0;Int32.TryParse(HttpContext.Current.Request.QueryString["max"],outmax);//读取数据 new OleDbDataAdapter(string.Format("select0 * from [User]",max> 0 ? " top " + max : string.Empty), c).Fill(ds); c.Close();//建立XML文档 var xml = new XmlDocument(); xml.LoadXml(ds.GetXml());//添加文档声明 xml.InsertBefore(xml.CreateXmlDeclaration("1.0", "UTF-8",null),xml.DocumentElement); //添加xslt声明 var xsl =xml.CreateProcessingInstruction("xml-stylesheet",@"type=""text/xsl""href=""Default.xslt"""); xml.InsertBefore(xsl,xml.DocumentElement); //输出 context.Response.ContentType ="application/xml"; context.Response.Write(xml.InnerXml); publicbool IsReusable get return false;再添加一个XSLT文件,命名为Default.xslt,输入以下代码: <?xml version="1.0"encoding="utf-8"?> <xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/199