如何在Mozilla Gecko 用Javascript加载XSL


Posted in Javascript onJanuary 09, 2007

在Mozilla Develop Center里,我们可以看到有以下的文章: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元素。
示例代码
var ownerDocument = document.implementation.createDocument("", "test", null);
var newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);
当然也可以用transformToDocument 
var newDocument = processor.transformToDocument(domToBeTransformed);
需要注意的是,转换后的节点是Element或者是一个片段,所以要经过下面的序列化才可使用obj.innerHTML=new Document
4。序列化。
(new XMLSerializer()).serializeToString(newDocument)
5。在IE中,可以用XMLDOM方法,xmldoc.transformNode(xslDocument)方法来进行接的转换。

首先,我们先建立一个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, "调用XMLHTTP错误,没有指定文件名。"]);
 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, "调用XMLHTTP错误,远程文件失败。"+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>

Javascript 相关文章推荐
jQuery的deferred对象使用详解
Aug 20 Javascript
用js控制组织结构图可以任意拖拽到指定位置
Jan 17 Javascript
JS的get和set使用示例
Feb 20 Javascript
用于deeplink的js方法(判断手机是否安装app)
Apr 02 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
Active控件问题小结(附解决办法)
Jun 09 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
Angular4 中常用的指令入门总结
Jun 12 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
Jul 23 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
JS实现可视化音频效果的实例代码
Jan 16 Javascript
如何让动态插入的javascript脚本代码跑起来。
Jan 09 #Javascript
JS效率个人经验谈(8-15更新),加入range技巧
Jan 09 #Javascript
你所要知道JS(DHTML)中的一些技巧
Jan 09 #Javascript
sina的lightbox效果。
Jan 09 #Javascript
JS中简单的实现像C#中using功能(有源码下载)
Jan 09 #Javascript
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
Jan 09 #Javascript
兼容Mozilla必须知道的知识。
Jan 09 #Javascript
You might like
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php SQL Injection with MySQL
2011/02/27 PHP
两款万能的php分页类
2015/11/12 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
Python求算数平方根和约数的方法汇总
2016/03/09 Python
python中的二维列表实例详解
2018/06/19 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
优秀员工自荐信范文
2013/10/05 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
股权收购意向书
2014/04/01 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书