XML对某些浏览器不支持,该如何解决?

coffeewar 2005-04-12 09:53:10
我的xsl用的名称空间是 http://www.w3.org/1999/XSL/Transform,但这个名称空间对 IE5.5 以下的好像不支持(不考虑其他浏览器)。那我怎么样才能在不支持该名称空间的采用服务器端解析,支持的采用客户端解析。

...全文
787 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
colee 2005-04-19
  • 打赏
  • 举报
回复
<xsl:apply-templates select不能匹配变量
coffeewar 2005-04-17
  • 打赏
  • 举报
回复
应该不是路径问题的,根目录下有 Advs.xml 上面写错了,我程序里是这样写的
<xsl:variable name="advertisements" select="document('Advs.xml')"/>==========>
<xsl:variable name="advertisements" select="document('/Advs.xml')"/>

document('Advs.xml')=====>document('/Advs.xml')



coffeewar 2005-04-16
  • 打赏
  • 举报
回复
up
fangzhe 2005-04-16
  • 打赏
  • 举报
回复
路径问题,服务器端程序路径下没有Advs.xml
coffeewar 2005-04-16
  • 打赏
  • 举报
回复
还有一个问题.
我在 xslt 中用了<xsl:variable name="advertisements" select="document('Advs.xml')"/>
然后调用<xsl:apply-templates select="$advertisements//advertisement1"/>

这样的话我直接访问 XML 文件是可以的,浏览器是6.0.
但通过服务端转换就不行,不知道为什么.
System.Xml.XPath.XPathDocument xdoc=new System.Xml.XPath.XPathDocument (Server.MapPath("default.xml"));
System.Xml.Xsl.XslTransform xsl=new System.Xml.Xsl.XslTransform();
xsl.Load(Server.MapPath("default.xslt"));
xsl.Transform(xdoc,null,writer,null);


fangzhe 2005-04-15
  • 打赏
  • 举报
回复
MSXML 2(IE 5)是草案的
MSXML 3.0(IE 5.5,6)开始支持XSLT;目前有4.0
名字空间MSXML2是为了兼容问题(因为和MSXML的不兼容了),并非版本。后面加3.0也是因此。Microsoft.XMLDOM是新的名字空间
coffeewar 2005-04-14
  • 打赏
  • 举报
回复
还想问一下 MSXML2.DOMDocument.3.0 与 Microsoft.XMLDOM 有什么区别,MSXML2.DOMDocument.3.0怎么这么多数字,又是 2 又是3还要来个 0,看不懂。
coffeewar 2005-04-14
  • 打赏
  • 举报
回复
呵呵,这也行,我怎么就没想到呢 谢谢楼上的。
scoutlin 2005-04-14
  • 打赏
  • 举报
回复
variable不能被草案支持

http://www.w3.org/1999/XSL/Transform支持

load 一段<xsl:variable name="xxx" select="xxx"/>

出错了就说明不支持http://www.w3.org/1999/XSL/Transform

具体代码,你自己写
coffeewar 2005-04-14
  • 打赏
  • 举报
回复
哎,没人
coffeewar 2005-04-14
  • 打赏
  • 举报
回复
up
coffeewar 2005-04-14
  • 打赏
  • 举报
回复
哎,我现在比较郁闷.xml是第一次使用,还有挺多问题比较迷惑.请好心人指教。
郁闷归郁闷还是说正事,回到我的问题。现在我的问题是,xsl使用了http://www.w3.org/1999/XSL/Transform 名称空间,但好像 IE5.5 以下不支持这个名称空间,因此2000操作系统默认 IE 显示不出来网页。我想用 scoutlin(8da子民)(www.8da.cc) 的方法先检测客户端 ie 是否支持该名称空间,该怎样做?
xsl也是属于xml 我不知道解析 xml和解析 xsl是不是用的同一个解析器,即如果使用 scoutlin(8da子民)(www.8da.cc) 的方法
try{
x = new ActiveXObject("解析器版本");
x.async = false;
x.loadXML(xml);
}
这里的解析器版本用什么才能支持解析 http://www.w3.org/1999/XSL/Transform 这个名称空间?

我表达能力比较差,可能问题没说清楚,不好意思。
liverpoolfc 2005-04-13
  • 打赏
  • 举报
回复
是啊,在服务器端用服务器语言去判断客户端浏览器类型再作判断,比如ASP,JSP,PHP,应该有相应的API去判断客户端浏览器类型的。
scoutlin 2005-04-13
  • 打赏
  • 举报
回复
http://xmlgbook.1.vg

function supportXML()
{
var xml = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><scout></scout>";
var xsl = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>";
xsl+="<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\">";
xsl+="<xsl:template match=\"/\">";
xsl+="<xsl:value-of select=\"system-property('msxsl:version')\"/>";
xsl+="</xsl:template></xsl:stylesheet>";
var x = null;
var version;
try{
x = new ActiveXObject("Microsoft.XMLDOM");
x.async = false;
x.loadXML(xml);
}
catch(e){return -1;}
try{
var s = new ActiveXObject("Microsoft.XMLDOM");
s.async = false;
if (s.loadXML(xsl)){
var op = x.transformNode(s);
if (op.indexOf("stylesheet") == -1)
version=op.substr
(op.lastIndexOf(">")+1);
else
version="0";
return parseInt(version);
}
else return -1;
}catch(e){return -1;}
}
var xslver=supportXML();
//不支持DOM,调用ASP端
if(xslver==-1)location.href='gbook.asp';
//支持DOM,不支持XSL,调用JSDOM
if(xslver==0)location.href='gbook.html';
//支持XSL,调用XSL
if(xslver>0)location.href='gbook.xml?temp='+Math.random();
coffeewar 2005-04-13
  • 打赏
  • 举报
回复
up
zglxb 2005-04-12
  • 打赏
  • 举报
回复
有看没咋 明白
coffeewar 2005-04-12
  • 打赏
  • 举报
回复
大哥给个简单的例子好不好。
总算有人回答了。
速马 2005-04-12
  • 打赏
  • 举报
回复
应该是某些浏览器不支持最新XML标准的问题..
对于非IE6浏览器,最好在服务端生成HTML,而不是在客户端进行XML/XSL转换
coffeewar 2005-04-12
  • 打赏
  • 举报
回复
什么鸟东西嘛,提了问题,贴子老找不到。
coffeewar 2005-04-12
  • 打赏
  • 举报
回复
我现在是这样解决的,要访问 xml页面先调用 .aspx页面,然后在后台获得客户端浏览器版本。
protected override void Render(HtmlTextWriter writer)
{
if(Request.Browser.Type.IndexOf("IE")>0&&Request.Browser.MajorVersion<6)
{
System.Xml.XPath.XPathDocument xdoc=new System.Xml.XPath.XPathDocument (Server.MapPath("default.xml"));
System.Xml.Xsl.XslTransform xsl=new System.Xml.Xsl.XslTransform();
xsl.Load(Server.MapPath("default.xslt"));
xsl.Transform(xdoc,null,writer,null);
}
else
{
Response.Redirect("default.xml");
}
// base.Render (writer);
}

但这样比较麻烦,而且感觉有点不爽,有没有办法直接访问 xml页面,达到同样的效果,比如可不可以用 IHttpHandler 接口之类的,不用每个页面都用 .aspx页面去判断。
加载更多回复(2)

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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