如何在Mozilla Gecko 用Javascript加載XSL
更新時(shí)間:2007年01月09日 00:00:00 作者:
在Mozilla Develop Center里,我們可以看到有以下的文章:http://developer.mozilla.org/en/docs/The_XSLT/JavaScript_Interface_in_Gecko:Basic_Example
首先,你需要了解如何動(dòng)態(tài)載入xml文件的方法,可以用XMLDOM對(duì)象,也可以用XMLHttpRequest,的responseXML對(duì)象,這里我用的是XMLHttpRequest。
用javascript載入xslt的方法如下:
1。用XMLDOM或者用XMLHttpRequest來(lái)加載xml和xslt。
2。用XSLTProcessor.importStylesheet來(lái)引入XSLT。
3。用XSLTProcessor.transformToFragment方法來(lái)把它轉(zhuǎn)換成DOM的Fragment。然后用appendChild或者用insertBefore等方法來(lái)追加或者插入這個(gè)DOM的fragment元素。
示例代碼
var ownerDocument = document.implementation.createDocument("", "test", null);
var newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);
當(dāng)然也可以用transformToDocument
var newDocument = processor.transformToDocument(domToBeTransformed);
需要注意的是,轉(zhuǎn)換后的節(jié)點(diǎn)是Element或者是一個(gè)片段,所以要經(jīng)過(guò)下面的序列化才可使用obj.innerHTML=new Document
4。序列化。
(new XMLSerializer()).serializeToString(newDocument)
5。在IE中,可以用XMLDOM方法,xmldoc.transformNode(xslDocument)方法來(lái)進(jìn)行接的轉(zhuǎn)換。
首先,我們先建立一個(gè)XML文件與XSLT文件,方便后面的講解。
foo.xml
<?xml version="1.0" encoding="utf-8"?>
<Article>
<Title>javascript load xslt in ie and mozilla</Title>
<Author>never-online</Author>
<Web>http://www.never-online.net</Web>
<Body>content is here</Body>
</Article>
foo.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<h1 class="title"><xsl:value-of select="/Article/Title"/></h1>
<div class="desc">Author: <xsl:value-of select="/Article/Author"/> -
Web: <xsl:value-of select="/Article/Web"/></div>
<p class="box">
<xsl:value-of select="/Article/Body"/>
</p>
</xsl:template>
</xsl:stylesheet>
foo.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> convert xsl using javascript - http://www.never-online.net </title>
<meta http-equiv="ImageToolbar" content="no" />
<meta name="author" content="never-online, BlueDestiny"/>
<meta name="keywords" content="never modules, Mozilla CSS, C#, .net, Refercence, BlueDestiny, never-online"/>
<meta name="description" content="BlueDestiny, never-online"/>
<meta name="title" content=" - http://www.never-online.net" />
<meta name="creator.name" content="never-online, BlueDestiny" />
<style type="text/css" media="all" title="Default">
.title { margin:10px 10% 0 10%; text-align:center; background-color:#639ACE; padding:10px; color:#fff; }
.desc { margin:10px 10% 0 10%; text-align:center; }
.box { margin:10px 10% 0 10%; border: 1px dotted #639ACE; padding:20px; }
</style>
<script type="text/javascript">
//<![CDATA[
//]]>
</script>
<body id="www.never-online.net">
<div id="demo"></div>
<script type="text/javascript">
//<![CDATA[
var xsltParser = function(xmlfileStr, xslfileStr) {
var retval = xslStylesheet = xmlDocument = null;
var browser = {
isIE:!!window.ActiveXObject,
isMozilla:(typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined')
};
var loadDocument = function (fileStr) {
if (!fileStr) throw new Error([65221, "調(diào)用XMLHTTP錯(cuò)誤,沒有指定文件名。"]);
var req = browser.isIE?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
req.open("GET", fileStr, false);
req.send(null);
if (req.readyState==4 && req.status==200) { return req.responseXML; }
else throw new Error([65222, "調(diào)用XMLHTTP錯(cuò)誤,遠(yuǎn)程文件失敗。"+fileStr+""]);
};
var ready2Transform = function () {
xmlDocument = loadDocument(xmlfileStr);
xslStylesheet = loadDocument(xslfileStr);
}();
var parseFromMoz = function () {
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslStylesheet);
var retval = xsltProcessor.transformToDocument(xmlDocument);
return (new XMLSerializer()).serializeToString(retval);//序列化
};
var parseFromIE = function () {
return xmlDocument.transformNode(xslStylesheet.documentElement);
};
if (browser.isMozilla) {
retval = parseFromMoz(xmlfileStr, xslfileStr);
}
else if (browser.isIE) {
retval = parseFromIE(xmlfileStr, xslfileStr);
} else { /* TO DO */ ;}; return retval;
}
document.getElementById("demo").innerHTML=xsltParser("foo.xml","foo.xsl")
//]]>
</script>
</body>
</html>
首先,你需要了解如何動(dòng)態(tài)載入xml文件的方法,可以用XMLDOM對(duì)象,也可以用XMLHttpRequest,的responseXML對(duì)象,這里我用的是XMLHttpRequest。
用javascript載入xslt的方法如下:
1。用XMLDOM或者用XMLHttpRequest來(lái)加載xml和xslt。
2。用XSLTProcessor.importStylesheet來(lái)引入XSLT。
3。用XSLTProcessor.transformToFragment方法來(lái)把它轉(zhuǎn)換成DOM的Fragment。然后用appendChild或者用insertBefore等方法來(lái)追加或者插入這個(gè)DOM的fragment元素。
示例代碼
var ownerDocument = document.implementation.createDocument("", "test", null);
var newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);
當(dāng)然也可以用transformToDocument
var newDocument = processor.transformToDocument(domToBeTransformed);
需要注意的是,轉(zhuǎn)換后的節(jié)點(diǎn)是Element或者是一個(gè)片段,所以要經(jīng)過(guò)下面的序列化才可使用obj.innerHTML=new Document
4。序列化。
(new XMLSerializer()).serializeToString(newDocument)
5。在IE中,可以用XMLDOM方法,xmldoc.transformNode(xslDocument)方法來(lái)進(jìn)行接的轉(zhuǎn)換。
首先,我們先建立一個(gè)XML文件與XSLT文件,方便后面的講解。
foo.xml
<?xml version="1.0" encoding="utf-8"?>
<Article>
<Title>javascript load xslt in ie and mozilla</Title>
<Author>never-online</Author>
<Web>http://www.never-online.net</Web>
<Body>content is here</Body>
</Article>
foo.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<h1 class="title"><xsl:value-of select="/Article/Title"/></h1>
<div class="desc">Author: <xsl:value-of select="/Article/Author"/> -
Web: <xsl:value-of select="/Article/Web"/></div>
<p class="box">
<xsl:value-of select="/Article/Body"/>
</p>
</xsl:template>
</xsl:stylesheet>
foo.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> convert xsl using javascript - http://www.never-online.net </title>
<meta http-equiv="ImageToolbar" content="no" />
<meta name="author" content="never-online, BlueDestiny"/>
<meta name="keywords" content="never modules, Mozilla CSS, C#, .net, Refercence, BlueDestiny, never-online"/>
<meta name="description" content="BlueDestiny, never-online"/>
<meta name="title" content=" - http://www.never-online.net" />
<meta name="creator.name" content="never-online, BlueDestiny" />
<style type="text/css" media="all" title="Default">
.title { margin:10px 10% 0 10%; text-align:center; background-color:#639ACE; padding:10px; color:#fff; }
.desc { margin:10px 10% 0 10%; text-align:center; }
.box { margin:10px 10% 0 10%; border: 1px dotted #639ACE; padding:20px; }
</style>
<script type="text/javascript">
//<![CDATA[
//]]>
</script>
<body id="www.never-online.net">
<div id="demo"></div>
<script type="text/javascript">
//<![CDATA[
var xsltParser = function(xmlfileStr, xslfileStr) {
var retval = xslStylesheet = xmlDocument = null;
var browser = {
isIE:!!window.ActiveXObject,
isMozilla:(typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined')
};
var loadDocument = function (fileStr) {
if (!fileStr) throw new Error([65221, "調(diào)用XMLHTTP錯(cuò)誤,沒有指定文件名。"]);
var req = browser.isIE?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
req.open("GET", fileStr, false);
req.send(null);
if (req.readyState==4 && req.status==200) { return req.responseXML; }
else throw new Error([65222, "調(diào)用XMLHTTP錯(cuò)誤,遠(yuǎn)程文件失敗。"+fileStr+""]);
};
var ready2Transform = function () {
xmlDocument = loadDocument(xmlfileStr);
xslStylesheet = loadDocument(xslfileStr);
}();
var parseFromMoz = function () {
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslStylesheet);
var retval = xsltProcessor.transformToDocument(xmlDocument);
return (new XMLSerializer()).serializeToString(retval);//序列化
};
var parseFromIE = function () {
return xmlDocument.transformNode(xslStylesheet.documentElement);
};
if (browser.isMozilla) {
retval = parseFromMoz(xmlfileStr, xslfileStr);
}
else if (browser.isIE) {
retval = parseFromIE(xmlfileStr, xslfileStr);
} else { /* TO DO */ ;}; return retval;
}
document.getElementById("demo").innerHTML=xsltParser("foo.xml","foo.xsl")
//]]>
</script>
</body>
</html>
相關(guān)文章
javascript的tab切換原理與效果實(shí)現(xiàn)方法
這篇文章主要介紹了javascript的tab切換原理與效果實(shí)現(xiàn)方法,實(shí)例分析了簡(jiǎn)單的tab切換實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01
Javascript實(shí)現(xiàn)鼠標(biāo)移入方向感知
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)鼠標(biāo)移入方向感知,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
js屬性對(duì)象的hasOwnProperty方法的使用
這篇文章主要介紹了js屬性對(duì)象的hasOwnProperty方法的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
JavaScript使用FileSystemObject對(duì)象寫入文本文件內(nèi)容的方法
這篇文章主要介紹了JavaScript使用FileSystemObject對(duì)象寫入文本文件內(nèi)容的方法,實(shí)例分析了javascript使用ActiveXObject的技巧與常見問(wèn)題的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
JavaScript對(duì)表格或元素按文本,數(shù)字或日期排序的方法
這篇文章主要介紹了JavaScript對(duì)表格或元素按文本,數(shù)字或日期排序的方法,涉及javascript頁(yè)面元素操作及排序的相關(guān)技巧,需要的朋友可以參考下2015-05-05
JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表和雙向循環(huán)鏈表的實(shí)現(xiàn)
本篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表和雙向循環(huán)鏈表的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

