论坛首页 Web前端技术论坛

MSXML默认解析外部DTD

浏览 2704 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-07  
昨日aimingoo说它测试xmldom的速度,发现载入一个wml的时候,费时不可思议的长,且用时不等。甚觉不解。故测之。

测试过程和书写代码略,就简述结论如下。

WML文件有DOCTYPE,上带有DTD声明。怀疑是去读取DTD文件所致。删除整个DOCTYPE声明,果然就好了。

但是程序每次删除DOCTYPE显然不可行,因为这样一个操作无法作为DOM操作(因为当时DOM尚未解析出来),而必须进行字符串处理,这样就不能直接load了。如此hack无论如何无法接受。

于是寻找正途,即msxml上的参数配置。经过狗狗,得到最终方案:
	var xmldoc = new ActiveXObject('MSXML2.DOMDocument.3.0');
	xmldoc.async = true;
	xmldoc.onreadystatechange = xmlLoaded;
	xmldoc.resolveExternals = false;
	xmldoc.validateOnParse = false;
	xmldoc.load('my.wml');


注意,resolveExternals和validateOnParse都需要设置。因为默认要启用validate,若禁用外部DTD的resolve,就无法validate了(除非有内部DTD),会出错(得不到xml dom对象)。

以上。

因印象中此问题以前似解决过,但现在又忘记了(早老痴呆矣),故记录于此。

又,aimingoo说其昨日狗狗半天未得其法,偶笑曰,吾之狗狗神功已经练至第七重也,尔功力尚不足矣。
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics