MSXML默认解析外部DTD

昨日aimingoo说它测试xmldom的速度,发现载入一个wml的时候,费时不可思议的长,且用时不等。甚觉不解。故测之。

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

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

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

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

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

以上。

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

又,aimingoo说其昨日狗狗半天未得其法,偶笑曰,吾之狗狗神功已经练至第七重也,尔功力尚不足矣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值