原创,网站xml+xslt的解决方案,xslt支持分析,欢迎大家讨论

patchclass 2005-04-18 08:58:35
很少在CSDN上发自己的文章,昨天晚上临时写了个程序,拿出来给大家分享
程序中可能还有其他一些问题,请高手们指正和讨论,谢谢大家

缘由:
由于我网站原来就是全站的xml+xslt的格式,但是改版后编程纯xhtml格式了,还没有进行xml+xslt 的整合.根据以往的经验,好像在进行xml+xslt处理时候或多或少都出现过问题,于是我突然想到利用我以前写的判断flash插件的类似方法来判断是否xlst可以被正确解析。
需要说明的是 在此之前,我至少知道两种 判断的xslt支持的方法
其一 利用服务器端得到的 客户端浏览器信息,即服务器变量中得到浏览器版本 从而判断是否支持xslt
优点: 速度比较快,即使客户端不支持js也可以判断,而且不受浏览器类型的限制
缺点: 判断过程不严格,可能浏览器版本不符合要求,但是却可以支持xslt,或者版本符合要求,但是却不可以正确支持xslt,比如说csdn在某些机器上就不能正确用xml+xslt显示,我估计csdn就是用此种方法判断是否支持xslt
其二: 利用客户端的js来分析机器所支持的xslt,然后选择性的跳转。
比如用以下的这个函数
function sniff(){
var xml = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><cjb></cjb>";
var xsl = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><x:stylesheet version=\"1.0\" xmlns:x=\"http://www.w3.org/1999/XSL/Transform\" xmlns:m=\"urn:schemas-microsoft-com:xslt\"><x:template match=\"/\"><x:value-of select=\"system-property('m:version')\" /></x:template></x:stylesheet>";
//var xsl = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><x:stylesheet version=\"1.0\" xmlns:x=\"http://www.w3.org/TR/WD-xsl\"></x:stylesheet>";

var x = null;

try{
x = new ActiveXObject("Microsoft.XMLDOM");
x.async = false;
x.loadXML(xml)
}catch(e){return(false)}

try{
var s = new ActiveXObject("Microsoft.XMLDOM");
s.async = false;
if (s.loadXML(xsl)){
try{
var op = x.transformNode(s);
if (op.indexOf("stylesheet") == -1){

return(true)
}
}catch(e){return(false)}
}
}catch(e){return(false)}
我以前的帖子里面提到过
优点: 对于IE浏览器可以准确的判断是否支持xslt
缺点: 受浏览器类型限制,只对IE有效,并且基于js技术,如果对方浏览器不支持js则无法使用,用js跳转,使得浏览不怎么方便。

对于以上两种解决方案我觉得都不够完美,于是就想了个自己的解决方案
基本原理: 既然要比较完美,那就要考虑到 可以真正的被解析,所以我嵌入了一个xml+xslt的测试页面,既然不用js,那么我跳转就用meta来控制,为了不必多次判断浏览器类型,所以我用cookie来判断。

1。 对于要访问的页面的开始 进行cookie的判断
判断一个 request.cookies("xsltSupport")的值是否存在,如果存在 则判断 当前是否支持xslt,由此来用server.execute来执行不同的文件
2。如果request.cookies("xsltSupport")的值不存在,进行xslt判断函数的调用
xslt判断函数中首先就设置了cookie的值
同时转移到另外一个探测页面D,同时把本页面的相关参数也用url传递过去,记住可能浏览器不支持cookie所以,session和cookie都不可以使用了就用url传值
3。在D页面中嵌套一个iframe,iframe是一个xml+xslt的文档X,对于D文档本身 会在3秒内自动跳转,并且D文档会判断cookie的值是否真正传递过来了,如果没有那么说明浏览器不支持cookie的,既然连cookie都不支持,那么只可以让对方以不支持xslt的格式进行浏览了
如果已经传值。那么设置cookies的值为xslt不支持(默认方式), 但是记住了 在iframe中的页面X 如果可以正确解析,那么将跳转到页面E,页面E中就是设置cookie说明浏览器支持xslt。此处有个先后次序,如果可以支持的话将修改原来的cookie值,从而真正的判断了是否xslt的支持
其关键部分是在于页面D和页X的meta跳转时间间隔不同,页面E时间为3秒,页面X为0秒,具体时间可以自己设定
4。D页面跳转的页面 为原来的页面,这时候就可以在原页面中利用cookie进行xslt支持的判断了,从而执行相应的操作
其判断的主要函数如下
'xslt的支持判断,Pattazl制作
function detectXSLT(detectPath)
if request.QueryString("nocookie")="Y" then
detectXSLT=false
else
if request.Cookies("enableXSLT")="" then
response.Cookies("enableXSLT")="YN"
quertstr=Request.ServerVariables("QUERY_STRING")
if quertstr<>"" then
redirStr=detectPath&"detectXSLT.asp?path="&server.URLEncode("http://"&Request.ServerVariables("HTTP_HOST")&Request.ServerVariables("URL")&"?"&quertstr)
else
redirStr=detectPath&"detectXSLT.asp?path="&server.URLEncode("http://"&Request.ServerVariables("HTTP_HOST")&Request.ServerVariables("URL"))
end if
response.Redirect(redirStr)
else
if request.Cookies("enableXSLT")="Y" then
detectXSLT=true
else
detectXSLT=false
end if
end if
end if
end function

使用方法:
首先下载我写的detectXSLT.rar,解压后把内容放到detectXSLT文件夹中
然后
<!--#include file="你的路径/detectXSLT/func.asp" -->
if detectXSLT("../detectXSLT/") then
' 如果支持xslt就用xml+xslt来显示
Server.Execute("XML.asp")
response.end
else
' 如果不支持xslt就用xhtml来显示
Server.Execute("XHTML.asp")
response.end
end if

最后分析:
本方法
优点:可以不受浏览器类型的限制,不需要js支持,对xslt的判断比较符合实际要求,即使不支持cookie也可以浏览,只是麻烦些
缺点:需要cookie的支持

具体可以查看这个http://www.yuhuatel.com/yang/news/detail.asp?id=1091页面

...全文
203 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
to 笨狼

黑兄的观点跟你我有所出入,他希望的是广泛的接受,而不是功能的强大,面向的对象不同,有不同的编程方法,他上次说的完全支持DIV+CSS简直是求道的精神,pf得很
hcz0663 2005-04-20
  • 打赏
  • 举报
回复
占个位置学习
cccc_cc 2005-04-20
  • 打赏
  • 举报
回复
分就不要了!
cccc_cc 2005-04-20
  • 打赏
  • 举报
回复
没时间看, 顶!!!!!!
超级大笨狼 2005-04-19
  • 打赏
  • 举报
回复
xslt做页面xml-html的转化,大菜小用了。
擒兽 2005-04-18
  • 打赏
  • 举报
回复
mark
menrock 2005-04-18
  • 打赏
  • 举报
回复
好贴还是要顶
patchclass 2005-04-18
  • 打赏
  • 举报
回复
我写web的标准是,可以写出 不受浏览器类型限制,或者说适应较广泛的页面
国外好多人的浏览器都把js支持关闭了啊,而且不是用的IE
patchclass 2005-04-18
  • 打赏
  • 举报
回复
呵呵,如果cookie 不支持的话,也可以浏览,但是传值问题不大好处理,只能用url传了
当然,我默认的是cookie失效时间为一年

这个就导致个缺点,如果对方浏览器已经更新,但是cookie里面还认为是老的版本,将不进行xslt的检测,希望大家有好的意见
hbhbhbhbhb1021 2005-04-18
  • 打赏
  • 举报
回复
好帖,顶下,一会中午休息来看
  • 打赏
  • 举报
回复
汗一个,不需要js支持,要cookie支持:(
mayi545 2005-04-18
  • 打赏
  • 举报
回复
to patchclass(黑翼
网站上的flash留言本怎么不能下载了。。。能发一份给我吗 sjemayi-py@yahoo.com.cn THANKS
patchclass 2005-04-18
  • 打赏
  • 举报
回复
没有分,就没有人气,呵呵,果然是硬道理
我就不加分:-)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧