(本篇摘自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 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.