DOMDocument 与 FreeThreadedDOMDocument 的使用方法

DOMDocument 与 FreeThreadedDOMDocument 有什么不同?分别在什么条件下适用?
服务器端操作本地文件应该使用哪个?

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

你可能感兴趣的:(xml,domdocument)