区别DOMDocument 与 FreeThreadedDOMDocument 的使用!

本文探讨了使用Msxml2.FreeThreadedDOMDocument与MSXML2.XSLTemplate进行XML文档的动态解析方法。通过示例代码展示了如何利用这些组件完成XSLT转换,并解释了自由线程DOM文档在XSLT处理中的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般使用Msxml2.Document组件来加载xml文档的,但当动态使用xsl解析xml文档时,必须使用Msxml2.FreeThreadedDOMDocument这种自由线程的组件,同时使用MSXML2.XSLTemplate模板组件来加载xml,xsl数据,通过MSXML2.XSLTemplate的transform方法,就可以动态的用xsl来解析xml数据了,另外,IE5开始,系统默认的xml组件是msxml2,如果需要使用更新的msxml组件需要安装更新的msxml组件包,并指定新的名称,例如Msxml2.FreeThreadedDOMDocument.4.0

意思是说,用transform转换xml的时候,必须用FreeThreadedDOMDocument加载文档,用XSLTemplate去解析吗?

我现在用的是DOMDocument加载xml和xsl并transform,暂时没有发现问题

我用JScript说明一下:
如果将XSLT作为一个DOMDocument加载:
var xsl=new ActiveXObject("MSXML2.DOMDocument.5.0");
xsl.load(路径);
// 然后使用XML文档的:
doc.transformNode(xsl);

这是没有问题的。

使用FreeThreaded的DOM主要是在用XSLTemplate来转换XML文档的时候:
var xsl=new ActiveXObject("MSXML2.FreeThreadedDOMDocument.5.0");
xsl.load(路径);
var xslt=new ActiveXObject("MSXML2.XSLTemplate.5.0"); //创建一个XSL模板
xslt.stylesheet=xsl; //模板的样式表源设为xsl
var proc=xslt.createProcessor(); //使用样式表创建一个XML处理器
proc.input=doc; //将XML文档连接到处理器
proc.transform(); //使用样式表转换文档
var xmlout=proc.output; //得到输出 注意取走输出一次后输出变为空

这是因为XSLProcessor必须异步地处理XML文档的转换 因此你的XSL文档必须是自由线程模式的
如果你的XSL文档是普通的DOMDocument 会得到提示: 需要自由线程模式

DOMDocument比较常用 而FreeThreaded的文档虽然用法基本一样
但机制复杂一些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值