`
Eric_2007
  • 浏览: 24913 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

正确使用不同版本的MSXML

    博客分类:
  • DOM
阅读更多

http://www.cnblogs.com/mjgforever/archive/2007/08/31/877076.html

前言
        微软有很多MSXML的版本,如Msxml2.DOMDocument.6.0、Msxml2.DOMDocument.5.0、Msxml2.DOMDocument.4.0等。在浏览器中如何运用这些版本显得非常必要。
        常见的错误用法:


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 and Msxml2.DOMDocument all have issues - be careful when using.  Details below.

        

        
for (var i = 0; i < progIDs.length; i++{

            
try {

                
var xmlDOM = new ActiveXObject(progIDs[i]);

                
return xmlDOM;

            }


            
catch (ex) {

            }


        }


        

        
return null;

       }


http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx

The code iterates through the "progIDs" array and instantiates the highest version MSXML DOM that is available on the machine and returns it to the caller (see below for details on which versions ship where). This has at least a few implications:

  • Compatibility – We do our best to maintain compatibility across versions of MSXML, however earlier versions of MSXML like MSXML 3 and MSXML 4 were implemented during the “wild west” of the XML emergence and we’ve learned a lot since then.  In addition, MSXML5 for Microsoft Office Applications was targeted specifically at Office scenarios.  Sometimes we do need to make design or implementation changes that affect behavior across MSXML versions. By iterating through the versions of MSXML you open your app up to more potential risk of “finding” one of the differences unexpectedly. 
  • Robustness - We can't fix every bug in every version so we've targeted MSXML6 (our newest) and MSXML3 (our most broadly deployed) versions of MSXML where we'll make the biggest investments.
  • Test cost – The more versions of MSXML your application potentially depends on means more versions to test your application with before you can ship it to your customers. 

My goal for this post is to give a quick history of MSXML lifecycle and versions, provide details with an example on implementing best practices with MSXML on the web, and talk about a couple key things to watch out for.

If you want the full story please read on, but if you’re short on time and want the quick scoop here it is in 4 bullets: 

  • Use MSXML 6.0 - it is “in the box” on Vista and available for download on Win2k, XP, and 2003. It has the best security, performance, reliability, and W3C conformance
  • MSXML 3.0 is our preferred “fallback” -It is installed on every OS from a fully patched Win2k SP4 installation on up, so it requires “zero-deployment” and is serviced regularly with the OS
  • MSXML 4.0 was released to the web about 5 years ago, but at this point has been superseded by MSXML 6.0 and is only intended to support legacy applications
  • MSXML 5.0 for Microsoft Office Applications is purpose-built for Office applications and isn’t intended for broad deployment.  Internet Explorer 7 actually has the MSXML5 components "off-by-default" in the Internet zone so your customers will get a goldbar for each MSXML5 control on a page if your code tries to instantiate it.  The best recommendation is to avoid MSXML5 in your web apps (only machines with Office 2003 or higher will have it, anyway.).

MSXML Lifecycle & History 

OK, the full story requires a little bit more context – so let’s cover the different versions of MSXML, where they ship, and what the long term strategy is. 

Over the long run, the goal is to have our customers move their applications to MSXML6.  In terms of deployment, we want to ship our technology "in-the-box" with the operating system so that page authors and app developers can take advantage of it with zero deployment.  However, our customers have told us they want symmetrical XML APIs on all supported OS platforms, so we still need a way to get the newest XML technologies to our downlevel OSes (Win2k, Win XP, and Win 2k3).  

MSXML6 will be part of the Vista operating system when it releases, but requires a redistributable package to be installed downlevel.  We’d like to get MSXML6 “inlined” in the next service pack of each of the downlevel OSes, but we need a strong business case to do so.  So in the short and medium term we will continue to ship a redistributable package for MSXML6 that can be installed on downlevel operating systems.  We'll try to get a post up on the benefits of moving to MSXML6 sometime soon.

As much as we'd love everyone to be on MSXML6 today, we realize the migration can take some time.  So we're continuing to invest in MSXML3 to support existing applications and applications that have zero deployment requirements.  MSXML3 doesn't have all the improvements in MSXML6, but developers should consider it a robust and stable platform for MSXML applications.  MSXML3 is already part of the operating system on a fully patched Win2k SP4 installation and higher so in general no deployment to the client is required.  Going forward, MSXML3 updates will come out in each of the OS service packs.  MSXML3 SP7 is the last update to MSXML3 that should ship in redistributable form and in the future no redistributable package should be necessary for our partners and customers to use MSXML3 functionality.

Finally, anyone using MSXML5 who isn’t writing applications specifically targeted at Microsoft Office 2003 or Microsoft Office 2007 should migrate to MSXML6.

The details

Once you pick a version of MSXML to use, how do you do it effectively?  MSXML ships side-by-side with version dependent ProgIDs. That means two things:

  • Versions are isolated – For example, if you’ve already got MSXML3 (msxml3.dll) on your machine and you install MSXML6 (msxml6.dll) it will lay down side-by-side in System32 and will have no effect on any application that uses MSXML3
  • ProgIDs are locked to their version - If you want your app to take advantage of your new MSXML6 installation you need to instantiate your MSXML objects using the MSXML 6.0 ProgIDs.

var xmlDOM = new ActiveXObject('Msxml2.DOMDocument.3.0') //uses MSXML 3.0

var xmlDOM = new ActiveXObject('Msxml2.DOMDocument.6.0') //uses MSXML 6.0

One related note - service packs of a particular version of MSXML are not side by side and will upgrade that version of MSXML to the service pack version. For example, if your computer is running MSXML3 SP5 and you install MSXML3 SP7, all applications that use MSXML3 will automatically be upgraded to run on 3 SP7.

Ideally, customers should standardize on MSXML6, but as mentioned above legacy applications or zero-deployment requirements may block full migration to MSXML6 in the short run. In this case there are two tensions that need to be balanced – functionality and test costs. This essentially leads to two options:

  • Try MSXML6 and fallback to MSXML3 – MSXML6 has some improvements that aren’t in MSXML3 such as support for XSD schema, and improved stability, performance, and security. So your app may try out MSXML6 if it is on the box and then “fallback” gracefully. Just remember to test your app with MSXML6 and with MSXML3 so you aren’t surprised when you release your application. Here’s a quick example:

if (Web.Application.get_type() == Web.ApplicationType.InternetExplorer) {

        var progIDs = [ 'Msxml2.DOMDocument.6.0',                                                   'Msxml2.DOMDocument.3.0'];

       

        for (var i = 0; i < progIDs.length; i++) {

            try {

                var xmlDOM = new ActiveXObject(progIDs[i]);

                return xmlDOM;

            }

            catch (ex) {

            }

        }

       

        return null;

       }

  • Standardize on MSXML3 with an eye towards MSXML6 in the future – This limits functionality somewhat to what is in MSXML3 but also keeps down test costs. I’ll try to post something in the future about writing MSXML3 apps that should upgrade more easily to MSXML6 (and beyond).

    A couple things to watch out for

    • MSXML6 has security sensitive features “off-by-default” while MSXML3 has some security-sensitive features “on-by-default” to avoid problems with backwards compatibility. Check out the SDK for more details. 
    • Use of XSD schema - MSXML3 does not have support for Xml Schema (XSD 1.0) so applications that depend on XSD will need to use MSXML6 directly.  There are a few changes from MSXML4 and MSXML5 in the XSD implementation in MSXML6 to be more conformant with the W3C specification and more compatible with System.Xml in .Net 2.0so some apps may need to do a little work during upgrade.  See the SDK for more details.
    • Default Query Language - When you are querying the DOM with SelectNodes or SelectSingleNode the default selection language in MSXML6 is XPath while the default selection language in MSXML3 is XSLPatterns.  To switch MSXML3 to the standard XPath 1.0 query language set the second-level DOM property Selection Language like this - xmlDoc.setProperty("SelectionLanguage", "XPath"); see our SDK for more details.
    • Version Independent ProgIDs – There’s a lot of confusion around the “version-independent” ProgID for MSXML. The version-independent ProgID is always bound to MSXML 3 (a lot of people think it picks up the latest MSXML that is on the box). This means the version independent ProgID and the “3.0” ProgIDs will return the same object. For example both statements in the following code will return an MSXML 3 DOMDocument:

    var xmlDOM = new ActiveXObject('Msxml2.DOMDocument.3.0')

    and

    var xmlDOM = new ActiveXObject('Msxml2.DOMDocument')

    • Older ProgIDs - Stay away from ProgIDs that end in suffixes lower than “3.0”. In particular some older operating systems have MSXML 2.6 on them, however these ProgIDs are “kill-bitted” in the recent MS06-061 Security patch
    • MSXML2 vs. Microsoft namespace – I’ve also seen a lot of code that instantiates the “Microsoft.XMLHTTP” ActiveX object rather than the MSXML2.XMLHTTP.3.0 or MSXML2.XMLHTTP.6.0 if you’re using 6.0. The “Microsoft” namespace is actually older and is only implemented in MSXML3 for legacy support. It’s unfortunate we used the “better” name on the older version, but stick to the “msxml2” namespace when instantiating objects.

    As always, I'd love to get some feedback from people so if you have questions, comments, or random thoughts you'd like to share please comment here or mail me directly (email link above).

    Adam Wiener

    Lead Program Manager

    Data Programmability/XML Technologies

 

作者:mjgforever
出处:http://mjgforever.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。

posted on 2007-08-31 12:31 mjgforever 阅读(892) 评论(0)  编辑 收藏 网摘 所属分类: Ajax

分享到:
评论

相关推荐

    msxml.rar依赖包

    MSXMLrar依赖包通常包含多个版本的MSXML组件,以满足不同应用程序的需求。 在给定的"msxml.rar"压缩包中,我们看到包含了一个名为"msxml4.msi"的文件。这个文件是Microsoft XML Core Services 4.0 Service Pack 的...

    msxml安装包

    请注意,不同的MSXML版本可能存在兼容性问题。例如,MSXML 3.0适用于较老的系统,而MSXML 6.0通常被认为更稳定且安全。因此,选择合适的版本对于避免潜在的问题至关重要。在安装之前,建议确认你的系统需求和项目所...

    msxml.msi下载

    MSXML包含多个版本,如MSXML3、MSXML4、MSXML6等,每个版本都有其特定的功能和兼容性。例如,MSXML3是许多老应用程序依赖的基础,而MSXML6则更注重性能和安全性。安装msxml.msi时,会根据系统需求选择合适的版本进行...

    msxml5.0_23951

    7. **兼容性**:尽管MSXML5.0主要针对较旧的Windows操作系统,但它仍可以在一些现代系统上运行,不过,对于新项目,通常建议使用更新的版本,如MSXML6,因为它具有更好的性能和更少的内置依赖。 在提供的压缩包文件...

    msxml5 补丁 安装文件

    再运行测试createobject("msxml2.serverxmlhttp.5.0")通过即msxml5安装正确。 msxml5.dll和msxml5r.dll是office提供的。 5.0 (office 2003) msxml5.dll、msxml5r.dll (5.0.2916.0)(最后一个 dll 是纯资源 dll)...

    官方MSXML修复工具

    这个特定的修复工具编号50927可能对应于特定版本的MSXML或特定类型的故障。 2. **使用说明.txt**:这个文件很可能是包含有关如何使用修复工具的指南,包括可能的步骤、注意事项以及常见问题解答。在开始修复过程前...

    MSXML5R.DLL

    MSXML5R.DLL是微软XML核心服务(MSXML)的一个组件,主要用于处理XML文档。在Windows操作系统中,DLL(动态链接库)文件是多个程序...对于需要处理XML的应用程序,理解和掌握MSXML5R.DLL的工作原理和使用方法至关重要。

    msxml3.dll 错误

    在日常使用计算机的过程中,我们可能会遇到浏览器假死的情况,此时屏幕上可能会提示“msxml3.dll 错误”。这类错误通常发生在使用 Internet Explorer 浏览器时,尤其是在尝试加载某些网页或执行特定操作时更为明显。...

    msxml4.dll.tlh

    1. **兼容性问题**:不同版本的MSXML可能与其他软件或系统组件存在兼容性问题,升级或降级时需谨慎。 2. **安全性更新**:微软定期发布安全补丁,应保持`msxml4.dll`的更新,以防止恶意攻击。 3. **错误处理**:在...

    msxml4.0-11

    MSXML(Microsoft XML Core Services)是由微软公司提供的一个核心组件,...通过安装提供的"amsxml4.0-11.msi"文件,用户可以确保系统能够正确运行依赖MSXML 4.0的软件,同时享受到该版本提供的任何增强功能和修复。

    msxml6脚本注释

    MSXML6是该系列的一个版本,它着重于性能优化、安全性和稳定性,尤其适用于Windows XP及更高版本的操作系统。在本文中,我们将深入探讨MSXML6的主要特点、使用场景以及如何在脚本中进行注释。 ### 1. MSXML6的特点 ...

    msxml 4.0 C++封装

    MSXML 4.0版本是一个重要的更新,它提供了更快的性能和更多的功能,支持DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式。 本项目主要针对MSXML 4.0进行C++的封装,以简化XML处理过程并提供...

    msxml5.rar

    再运行测试createobject("msxml2.serverxmlhttp.5.0")通过即msxml5安装正确。 msxml5.dll和msxml5r.dll是office提供的。 5.0 (office 2003) msxml5.dll、msxml5r.dll (5.0.2916.0)(最后一个 dll 是纯资源 dll)...

    msxml 4.0 SP3下载

    5. **XML Schema支持**:MSXML 4.0支持XML Schema,这是一种用于定义XML文档结构的规范,有助于确保XML数据的正确性和一致性。 6. **性能优化**:SP3(Service Pack 3)作为MSXML 4.0的一个重要更新,包含了性能...

    msxml5r.dll

    许多网络游戏使用XML文件存储配置信息或与服务器进行数据交互,msxml5r.dll的缺失可能导致游戏客户端无法正确解析这些文件,从而造成游戏启动失败或运行异常。 3. **电脑无故蓝屏** 蓝屏(Blue Screen of Death, ...

    MSXML4.DLL 动态链接库文件

    - **兼容性**:虽然MSXML4.DLL支持XML 1.0标准,但不同版本可能存在差异,升级或降级可能影响程序的兼容性。 - **安全更新**:微软定期发布安全更新以修复MSXML中的漏洞,使用时应确保文件是最新的安全版本。 - **...

    某些系统在使用中需要用到的msxml5.dll

    《深入理解MSXML5.dll及其应用》 MSXML5.dll,全称为Microsoft XML Core Services 5.0,是...了解并掌握其功能和使用方法,不仅有助于开发者更高效地利用XML,也能帮助系统管理员更好地诊断和解决与之相关的故障问题。

    MVS2005安装失败的解决方案MSXML

    不同版本的MSXML之间可能存在不兼容性,阻碍新版本的正确安装。 3. **注册表错误**:注册表中的相关键值可能损坏或缺失,导致MSXML 6.0无法正确注册。 4. **网络问题**:如果安装过程中需要从微软服务器下载必要的...

    MSXML3.dll

    - **版本兼容性**:不同的Windows操作系统可能需要不同版本的MSXML,因此在部署应用程序时,应确保目标系统上安装了正确的MSXML版本。 - **注册问题**:MSXML3.dll是动态链接库,有时可能需要手动注册才能在系统中...

    office2010安装组件 msxml6_x86

    描述中提到的“安装Office时经常会缺少的组件”,这是由于许多用户使用的Windows XP等操作系统是经过精简或定制的版本,这些版本为了节省空间或提高系统运行速度,可能会移除一些非核心的组件,包括MSXML 6.0。...

Global site tag (gtag.js) - Google Analytics