我是学习XSLT的新手,我遇到了一些我真的不太了解的东西。我需要在转换文档之前添加一个XSLT参数。我可以为非IE浏览器这样做:
function loadXMLDoc(dname) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", dname, false);
xhttp.send("");
return xhttp.responseXML;
}
function displayResult() {
xml = loadXMLDoc("cdcatalog.xml");
xsl = loadXMLDoc("cdcatalog.xsl");
// code for IE
if (window.ActiveXObject) {
ex = xml.transformNode(xsl);
document.getElementById("example").innerHTML = ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
document.getElementById("example").appendChild(resultDocument);
}
}
现在,我可以为非IE浏览器,新的XSLT Processor对象,导入样式表,只需在转换过程之前添加参数。虽然这个代码的IE版本似乎没有发生这种情况,但我不能简单地在转换之前添加参数。我大肆搜索并看到不同的东西告诉我创建各种不同MSXML版本的新ActiveX对象,我对整个事件深感困惑。
采取上述代码,我该怎么做:
xsltProcessor.setParameter(null,"PARAMNAME","PARAMVALUE");
除了IE之外,如果可能的话,有人可以解释IE如何处理整个XSLT概念与FF / O / C /其他文明浏览器的不同吗?
答案 0 :(得分:1)
您可以尝试使用Sarissa,它是一个提供跨浏览器XSLT转换API的抽象层。
答案 1 :(得分:0)
根据this page,您可以使用
XSLTProcessor.addParameter("Parameter Name", "Parameter Value");
使用
创建XSLTProcessor
var XSLTCompiled = new ActiveXObject("MSXML2.XSLTemplate");
XSLTCompiled.stylesheet = XSL.documentElement;
var XSLTProcessor = XSLTCompiled.createProcessor();
变换调用也不同。
XSLTProcessor.transform();
无论如何,看起来对你要求的内容有一个非常精细的解释。
我做了跨浏览器的XSLT转换了一段时间,这是我使用的代码。 createDocument
只是一个返回DOM文档的函数。我没有做样式表参数,所以也许这有点偏离主题,但无论如何它适用于IE6 +和Firefox 1.5 +。
// arguments can be string (uri of document) or document node
function xslTransform( content, transform, options )
{
if ("string" == typeof content) content = createDocument( content );
if ("string" == typeof transform) transform = createDocument( transform );
var targetEle;
if (options && options.target) targetEle = document.getElementById(options.target);
if (targetEle && options.replace)
while (targetEle.hasChildNodes())
targetEle.removeChild( targetEle.firstChild );
if (window.XSLTProcessor)
{
var processor = new XSLTProcessor();
processor.importStylesheet( transform );
var frag = processor.transformToFragment( content, document );
if (targetEle)
targetEle.appendChild( frag );
}
else if (window.ActiveXObject)
{
if (targetEle)
targetEle.innerHTML = content.transformNode( transform );
}
else return "XSLT not supported";
}