欢迎来到福编程网,本站提供各种互联网专业知识!

如何在Mozilla Gecko 用Javascript加载XSL

发布时间:2007-01-09 作者: 来源:转载
在MozillaDevelopCenter里,我们可以看到有以下的文章:http://developer.mozilla.org/en/docs/The_XSLT/JavaScript_Interface_in_Gecko:Basic_Example首先,你需要了解如何动态载入xml文件的方法,可以用XMLDOM对象,也可以用XMLHttpRequest,的responseXML
在MozillaDevelopCenter里,我们可以看到有以下的文章:http://developer.mozilla.org/en/docs/The_XSLT/JavaScript_Interface_in_Gecko:Basic_Example
首先,你需要了解如何动态载入xml文件的方法,可以用XMLDOM对象,也可以用XMLHttpRequest,的responseXML对象,这里我用的是XMLHttpRequest。

用javascript载入xslt的方法如下:
1。用XMLDOM或者用XMLHttpRequest来加载xml和xslt。
2。用XSLTProcessor.importStylesheet来引入XSLT。
3。用XSLTProcessor.transformToFragment方法来把它转换成DOM的Fragment。然后用appendChild或者用insertBefore等方法来追加或者插入这个DOM的fragment元素。
示例代码
varownerDocument=document.implementation.createDocument("","test",null);
varnewFragment=processor.transformToFragment(domToBeTransformed,ownerDocument);
当然也可以用transformToDocument
varnewDocument=processor.transformToDocument(domToBeTransformed);
需要注意的是,转换后的节点是Element或者是一个片段,所以要经过下面的序列化才可使用obj.innerHTML=newDocument
4。序列化。
(newXMLSerializer()).serializeToString(newDocument)
5。在IE中,可以用XMLDOM方法,xmldoc.transformNode(xslDocument)方法来进行接的转换。

首先,我们先建立一个XML文件与XSLT文件,方便后面的讲解。
foo.xml


javascriptloadxsltinieandmozilla
never-online
http://www.never-online.net
contentishere

foo.xsl





Author:-
Web:






foo.html




convertxslusingjavascript-http://www.never-online.net







.title{margin:10px10%010%;text-align:center;background-color:#639ACE;padding:10px;color:#fff;}
.desc{margin:10px10%010%;text-align:center;}
.box{margin:10px10%010%;border:1pxdotted#639ACE;padding:20px;}


//

//]]>




//varxsltParser=function(xmlfileStr,xslfileStr){
varretval=xslStylesheet=xmlDocument=null;
varbrowser={
isIE:!!window.ActiveXObject,
isMozilla:(typeofdocument.implementation!='undefined')&&(typeofdocument.implementation.createDocument!='undefined')&&(typeofHTMLDocument!='undefined')
};
varloadDocument=function(fileStr){
if(!fileStr)thrownewError([65221,"调用XMLHTTP错误,没有指定文件名。"]);
varreq=browser.isIE?newActiveXObject("MSXML2.XMLHTTP"):newXMLHttpRequest();
req.open("GET",fileStr,false);
req.send(null);
if(req.readyState==4&&req.status==200){returnreq.responseXML;}
elsethrownewError([65222,"调用XMLHTTP错误,远程文件失败。"+fileStr+""]);
};
varready2Transform=function(){
xmlDocument=loadDocument(xmlfileStr);
xslStylesheet=loadDocument(xslfileStr);
}();
varparseFromMoz=function(){
varxsltProcessor=newXSLTProcessor();
xsltProcessor.importStylesheet(xslStylesheet);
varretval=xsltProcessor.transformToDocument(xmlDocument);
return(newXMLSerializer()).serializeToString(retval);//序列化
};
varparseFromIE=function(){
returnxmlDocument.transformNode(xslStylesheet.documentElement);
};
if(browser.isMozilla){
retval=parseFromMoz(xmlfileStr,xslfileStr);
}
elseif(browser.isIE){
retval=parseFromIE(xmlfileStr,xslfileStr);
}else{/*TODO*/;};returnretval;
}
document.getElementById("demo").innerHTML=xsltParser("foo.xml","foo.xsl")
//]]>



相关推荐