在Internet Explorer中正确使用MSXML
来源:SQL中国研发中心 发布时间:2009-02-22 18:41:00
我参与了IE7的开发过程,看到了在IE浏览器中形形色色使用MSXML的方法。显然有一些东西困扰着开发者:MSXML“混乱”的版本以及如何创建“正确”的实例。下面是一段非常常见的代码:
if (Web.Application.get_type() == Web.ApplicationType.InternetExplorer) {
var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.5.0', 'Msxml2.DOMDocument.4.0',
'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ];
// MSXML5.0、MSXML4.0以及Msxml2.DOMDocument都存在问题
for (var i = 0; i < progIDs.length; i++) {
try {
var xmlDOM = new ActiveXObject(progIDs[i]);
return xmlDOM;
} catch (ex) {
}
}
return null;
}
以上代码遍历progIDs数组并且实例化客户端版本最高的MSXML DOM然后返回给调用者。这段代码暗含:
兼容性
我们尽力保持各个版本MSXML直接的兼容性,不过,他们之间仍然有不少差别。MSXML 3和MSXML 4是在XML拓荒期时实现的,从中我们学习到了许多经验。MSXML 5是为微软Office产品量身定做的。有时候我们不得不在不同版本上修改某些设计与实现。依次遍历不同的MSXML版本将更容易遇到不期而遇的由于版本行为差异引起的问题。健壮性
由于资源有限,我们不可能修复每个版本中的每个缺陷,于是我们针对性地把资源集中于MSXML 6(最新版本)和MSXML 3(最广泛使用的版本)。测试成本
依赖越多的MSXML版本意味着发布你的应用程序之前需要越多的测试。
在这篇文章中我将简要给出MSXML的历史、生命周期以及版本,通过一个例子提供网络中使用MSXML的最佳实践的细节,以及一些需要注意的地方。
如果你想阅读完整的故事,那么请继续阅读下文;否则,请参考下面四个条目以快速掌握梗概:
使用MSXML 6。它随着Vista发布,也提供在Win2k、XP和2003的安装包。它最安全、性能最好、可靠性最好、最符合W3C标准。
MSXML 3是我们最推荐的替补——从Win2k SP4开始,你几乎可以在所有操作系统上找到它。你几乎不用考虑软件发布的问题。而且它经常随着操作系统升级。
MSXML 4是七年前发布的,不过,现在已经被MSXML 6取代,应该仅仅用于支持旧版应用程序(legacy applications)。
MSXML 5是为微软Office量身定做,并不是为普通的开发而设计的。Internet Explorer 7在Internet Zone默认不会直接运行MSXML5——当你尝试实例化MSXML5时IE会跳出提示栏。此外,只有安装了Office 2003及以上的系统会有MSXML5。总之,应该尽量避免在网络应用中使用MSXML5。
事实上,MSXML5 组件是默认关闭的。
MSXML生命周期和历史
说来话长,不如让我们回顾不同版本的MSXML、发布背景以及定位。
让我们的客户把他们的应用程序移植到MSXML6上去是我们的最终目标。说到发布,MSXML 6将随着操作系统一起发布,这样网页作者以及软件开发人员都可以方便地使用这个部件而不用考虑发布的问题。不过,由于客户需要在所有微软支持的操作系统上使用同样的XML API,我们仍然需要一种方法使得新的XML技术可以应用到较低版本的操作系统(Win2k、Win XP和Win2k3)中。
MSXML 6已经随着Vista一起发布,不过对于以前的操作系统,则需要单独安装发行包。我们希望MSXML6与较低版本的操作系统的下一个Service Pack一起发布,但是我们需要足够的商业需求才可以这样做。所以,我们的近期和中期计划是仍然保持发布一个可以安装在较低版本操作系统上的MSXML6 可再发行组件包(Redistributable Package)。在以后的博文中,我们会详细讲述迁移到MSXML6的好处。
虽然我们希望今天每个人都在使用MSXML6,但仍然清醒地意识到迁移需要相当的时间。所以我们将继续在MSXML3上投入资源以支持现有的应用程序以及满足那些需要零发布需求。虽然MSXML3并不具有MSXML6的新特性,不过MSXML3仍然不失为一个稳定而强健的XML平台。MSXML3已经随着Win2000 SP4以及以上的操作系统一起发布,对于应用程序而言可以说无需考虑发布的问题。以后,MSXML3的更新将会随着每种操作系统的Service Pack一起发布。 MSXML3 SP7 是最后一个以可再发行组件包形式发布的MSXML3 Service Pack。以后,我们的合作伙伴和客户将不会有使用MSXML3更新的可再发行组件包的需求。
MSXML4是MSXML6的前身,不过并不曾随着操作系统发布。就稳定性、安全性、W3C标准以及与System.Xml的兼容性而言,MSXML6是一个巨大的进步。此外,MSXML6还提供64位版本。目前,我们主要在MSXML6和MSXML3上投入精力,所以我们希望用户尽可能迁移到MSXML6,或者根据需要迁移到MSXML3。
最后,如果不是针对Microsoft Office 2003或者Microsoft Office 2007编写程序却使用MSXML5的开发者,应该尽快迁移到MSXML6。


猜你喜欢
- 目录准备数据集导入所需的软件包将数据从文件加载到Python变量拆分数据进行训练和测试标记化并准备词汇预处理输出标签/类建立Keras模型并
- 文本框 textarea 限制输入文字个数的的javascript代码,我们经常在评论留言页面我们需要在客户端限制访客的留言长度,当然最好我
- 最近论坛里总有人问幻灯片怎么从数据库里取数据,花了几分钟简单的写了下。用到的人可以自己在细化<%dim rs,sqlset&
- 本文实例讲述了Python实现按中文排序的方法。分享给大家供大家参考,具体如下:安装中文库sudo apt-get updatesudo a
- 用两个文件.GLOBAL.ASA和online.asp下面分别给出两个文件的源代码.呵呵,我也是菜鸟,大家加油哟!<SCR
- 用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供
- 本文实例为大家分享了python实现多人聊天室的具体代码,供大家参考,具体内容如下一、目的以实现小项目的方式,来巩固之前学过的Python基
- vi /etc/freetds/freetds.conf [global]# TDS protocol versiontds version
- Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的
- 示例from optparse import OptionParser[...]def main():
- 本文实例讲述了Go语言导出内容到Excel的方法。分享给大家供大家参考。具体实现方法如下:package main &
- 众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -
- 作为抛砖引玉,用python3实现百度云语音解析,首先需要模拟Post请求把音频压缩文件丢给百度解析。但是遇到一个问题客户端怎麽丢数据都是返
- 在数据库testDB中存在架构A及用户A,现将testDB数据库所属的用户由A改为B,同时删除用户A;架构也由A改为B,删除架构A,操作如下
- 一般iis中比较简单,iis6如下图所示即可:很多购买虚拟主机空间的用户,如果空间商提供了在线管理程序,也可以实现。具体的看下帮助即可。需要
- 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函
- question: Django中对数据库的调用非常的隐蔽,在各种复杂的模块互相拼接继承中很难发现获取数据库内容的部分来,开始试图理解一下下
- 思考一个问题:怎么实现在第一次检索的基础上进行二次检索?通常,我们的做法是第一次检索时保存检索条件,在第二次行检索时组合两次检索条件对数据库
- 数据库数据导出为excel表格,也可以说是一个很常用的功能了。毕竟不是任何人都懂数据库操作语句的。下面先来看看完成的效果吧。数据源导出结果依
- 需求描述我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能。业务梳理通过长时间的