使用MSXML 2.0执行XSLT转换

时间:2012-04-05 07:16:57

标签: javascript xml xslt dom

我正在尝试使用xslt和xml作为字符串执行xslt转换的一些方法。 如果我们传递xml文件的url,那么使用load()方法可以正常工作。

function init(xml, xslt) {
    var srcTree = new ActiveXObject("Msxml2.DOMDocument.6.0");
    srcTree.async=false;
    srcTree.load(xml); 
    var xsltTree= new ActiveXObject("Msxml2.DOMDocument.6.0");
    xsltTree.async = false;
    xsltTree.load(xslt);
    var resTree = document.getElementById("HTMLData");
    resTree.innerHTML = srcTree.transformNode(xsltTree);
}

在上面的方法中,我们传递了xml和xslt的位置(url)。但是根据要求,我们需要将整个xml和xslt作为字符串传递(如<?xml version= ....)。 如果您发现我的问题很难理解,那么也请评论这个问题 不容易理解。提前谢谢。

编辑:

可以使用(示例):

调用上述函数
init('/myfiles/xml/books.xml', '/myfiles/xslt/style.xslt');

但我需要将xml作为字符串变量存储在javascript中,然后传递这些字符串 变量到init方法。例如:

var xmlDocument = '<?xml version='1'?><books>....</books>';
var xsltDocument = '<?xml version='1'?><xsl xmlns:xsl='...'....</xsl>';
init(xmlDocument, xsltDcoument);

1 个答案:

答案 0 :(得分:1)

使用loadXml代替load - 请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms754585(v=vs.85).aspx

function init(xml, xslt) { 
    var srcTree = new ActiveXObject("Msxml2.DOMDocument.6.0"); 
    srcTree.async=false; 
    srcTree.loadXml(xml);  
    var xsltTree= new ActiveXObject("Msxml2.DOMDocument.6.0"); 
    xsltTree.async = false; 
    xsltTree.loadXml(xslt); 
    var resTree = document.getElementById("HTMLData"); 
    resTree.innerHTML = srcTree.transformNode(xsltTree); 
}