找回密码
 注册
搜索
热搜: 回贴

DOMDocument 与 FreeThreadedDOMDocument 有什么不同?分别在什么条件下适用?

2010-1-30 22:21| 发布者: admin| 查看: 20| 评论: 0|原作者: 小可爱

(本篇摘自http://blog.sina.com.cn/u/476ebfd00100067c)

一般使用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的文档虽然用法基本一样
但机制复杂一些
可以参考MSDN Library

最新评论

相关分类

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 03:35 , Processed in 0.134171 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部