MSXML2.DOMDocument加载Internet资源

The information in this article applies to:

  • Microsoft XML, versions 2.5,2.6, 3.0

SYMPTOMS

如果你调用MSXML.DOMDocument或者MSXML.DOMDocument的Load方法来加载一个XML文件资源,而访问这个XML文件是Internet上的资源,那么具体会有几种情况出现,开发人员应该熟悉不同的设置下会出现什么状况。

其中有这么四种情况比较特殊,程序员一定要小心。

测试的代码如下:

<%Response.Buffer = False%>

<html>

<head>

</head>

<body>

<%

    Dim oXML, oXMLError, ReturnValue, x

    Set oXML = Server.CreateObject("MSXML2.DOMDocument")

    ' 设置DOMDocument加载资源时是异步加载,还是同步加载:

A   oXML.async = false

    ' 设置目的:

    ' True/False value indicating if the "server-safe" ServerXMLHTTP

    ' component should be used to load a document to a server

B   oxml.setProperty "ServerHTTPRequest", true

    ' 通过HTTP加载资源:

C   ReturnValue = oXML.Load("http://localhost/asp/ServerXML.xml")

    ' 或者加载文件资源:

D   'ReturnValue = oXML.Load("C:/Inetpub/testASP/ServerXML.xml")

    ' 打出DOMDocument.load的返回值:

    Response.write "Result of load method is =" & ReturnValue & "<br>"

    ' 打出DOMDocument加载资源的URL:

    Response.Write oxml.url & "<br>"

    '如果DOMDocument.load方法返回值为FALSE,则打出它的错误原因:

    If ReturnValue = False Then

       Response.Write "--****************--" & "<br>"

       Set oXMLError = oXML.ParseError

       Response.Write "" & _

          oXMLError.ErrorCode & _

          " - " & oXMLError.Reason & _

          "<br>"

       Set oXMLError = Nothing

       Response.Write "--****************--" & "<br>"

    End If

    ' 打出加载的XML文档的节点个数

    For x = 0 to oxml.childNodes.length

       Response.Write "Node " & x & "." & "<br>"

    Next

    ' 打出加载的XML文档内容:

Response.Write "<-- XML Content: -->" & "<br>" & oxml.xml & "<br>" & " --------" 

    Set oXML = Nothing

%>

</body>

</html>

  

第一种情况(小心,一个幌子!):

默认情况下,DOMDocument对象的async属性是TRUE,即异步方式加载。

而且加载时不使用ServerXMLHTTP组件。

即注释掉上面代码中的第A行和B行代码。

A   ‘ oXML.async = false

B   ‘ oxml.setProperty "ServerHTTPRequest", true

这时候,加载会成功。

ReturnValue将会是TRUE。

但是加载到DOMDocument中的XML文档为空!也就是说,load方法返回的TRUE是一个幌子!

结果如下所示:

对于这种情况,程序员一定要小心!

XML虽然没有报告任何错误,而且load方法也表明成功,但是DOM的xml属性却为空。

第二种情况(小心,一个严重的错误):

如果你显式地声明async属性为FALSE,即同步方式加载XML文档。

而且加载时不使用ServerXMLHTTP组件。

即只注释掉上面代码中的第B行代码。

A      oXML.async = false

B   ‘ oxml.setProperty "ServerHTTPRequest", true

那么将会遭遇失败!ReturnValue将是False。

错误原因为:

-2146697209 - 无所需资源的可用数据。

也就说,同步加载Internet上的XML资源是不会成功的!!

第三种情况(不允许的情况!):

如果你的async属性为TRUE,即异步方式加载XML文档。

而且加载时使用ServerXMLHTTP组件。

即启用上面代码中的第B行代码。注释掉第A行代码。

A      ‘oXML.async = false

B      oxml.setProperty "ServerHTTPRequest", true

报告了错误!说明使用SXH组件异步加载XML文档,是不被允许的!

错误描述为:

-1072897486 - The ServerHTTPRequest property can not be used when loading a document asynchronously and is only supported on Windows NT 4.0 and above.

第四种情况(真正OK的情况!):

如果你显式地声明async属性为FALSE,即同步方式加载XML文档。

而且加载时使用ServerXMLHTTP组件。

即启用上面代码中的第A和B行代码。

A      oXML.async = false

B      oxml.setProperty "ServerHTTPRequest", true

那就可以了!说明使用SXH组件加载XML文档,能够纠正了异步方式加载Internet资源的错误。

谢天谢地,终于有一种情况能够加载Internet上的XML资源了。

总结一下:

加载方式

是否使用

ServerXMLHTTP组件

加载结果

异步加载

不使用

加载会成功。

但是加载到DOMDocument中的XML文档为空

同步加载

不使用

将会遭遇失败!错误原因为:

-2146697209 - 无所需资源的可用数据。

异步加载

使用

不被允许的

同步加载

使用

真正成功

参考原文链接:https://blog.csdn.net/tanminr/article/details/1534560

MSXML2.DOMDocument加载Internet资源的更多相关文章

  1. 填补Resources和WWW加载本地资源的坑

    总的来说Resources和WWW加载本地资源坑比较多,大多与路径有关. 下面代码构成了一个路径的预读模块: 此模块主要解决的坑是:Resources或WWW加载本地的文件夹中的多个文件时,无法获取文 ...

  2. Error #2044: 未处理的 IOErrorEvent:。 text=Error #2035: 找不到 URL这是flash加载外部资源时有时会遇到的问题,对于此问题解决如下

    导致这个错误的主要原因是未添加IOErrorEvent事件监听,或者添加了监听,但是加载时使用了unload() 参考资料: http://blog.csdn.net/chjh0540237/arti ...

  3. schtasks在win7下提示错误:无法加载列资源

    转自: http://blog.chinaunix.net/uid-24946452-id-2887851.html 查看cmd 编码 chcp 如使用 936中文GBK编码的话 schtasks.e ...

  4. iOS webView 远程html加载本地资源

    昨天,一个朋友让我帮他在IOS上弄这样一件事情: webView 调用远程URL,并且让远程的web 通过自定义标签能实现内嵌本地的图片.js 或音频等. 比如:在服务器端 的html文件中 这样写到 ...

  5. 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

    Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...

  6. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

  7. [IOS]UIWebView 请求网络页面或者加载本地资源页面

    UIWebView是一个能够显示网页的IOS视图控件,我们可以用它来访问一个网站.下面是具体的实例: 操作步骤: 1.首先在xib文件中拖放一个UIWebView控件到view中 2.将下载的页面以及 ...

  8. 使用three.js加载3dmax资源,以及实现场景中的阴影效果

    使用three.js可以方便的让我们在网页中做出各种不同的3D效果.如果希望2D绘图内容,建议使用canvas来进行.但很多小伙伴不清楚到底如何为我们绘制和导入的图形添加阴影效果,更是不清楚到底如何导 ...

  9. Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include().

    Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include(). ...

  10. iOS WebView 加载本地资源(图片,文件等)

    https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...

随机推荐

  1. 华为三折屏Mate XT

    相关: https://www.youtube.com/watch?v=vMx3kVnp11Q

  2. MQTT应用:Air780EP低功耗4G模组AT开发

    ​ 终于要讲一讲MQTT应用! 本文应各位大佬邀请,详细讲解Air780EP模组MQTT应用的多个AT命令. Air780EP是低功耗4G模组之一,支持全系列的AT指令以及LuatOS脚本二次开发. ...

  3. 2022 GDOI普及组游记

    2022 GDOI普及组游记 注:传送门均为校内网址 day -4 被年级主任集中开会,给我们免了亿堆作业,灌了亿壶鸡汤,宣布了为期一(亿)周的集训开始. day -3 中午一直在复习期中(4.21- ...

  4. php 如何实现 git diff

    无意间想到这个问题,如何用php来实现git diff,如果实现了这个功能,岂不是能够使用php对在线编辑文件的功能做更进一步的优化和提升? 查了一下还真有这样的库,话不多说,开始执行 compose ...

  5. 使用MySQL Shell 8.4.1-LTS 直接将数据复制到 MySQL实例

    在之前的文章中,我谈到了如何使用 MySQL Shell 通过多线程过程来转储和加载数据,以及如何以不同格式导出表数据,然后可以将这些数据导入到新的 MySQL 实例中.这篇文章将讨论我们如何直接将数 ...

  6. Mysql分页实现及优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  7. vue中获取v-for循环出来的元素的相对于父级的最左边的距离

  8. 推送本地镜像到 Harbor

    1.harbor没有启动 https 我本地 安装 harbor 的时候由于没有使用证书,所以将 harbor.yml https 注释掉. 2.配置docker镜像地址 比如 我的 ip 为 192 ...

  9. Echarts 基本使用

    1.Echarts简介 ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求. ECharts 包含了以下特性: (1)丰富的可视化类型: 常规的折线图. ...

  10. [AGC029D] Grid game题解

    这题很显然可以用贪心来解. 由于先手不动一定会让局数更少,所以先手要能动就动. 而后手一定是希望他的石子可以撞到一个障碍物上,这样先手就无法移动了,后手就可以让局数更少. 因为先手一定会能动就动,所以 ...