科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件[HOW TO] 如何在Mozilla Gecko 用Javascript加载XSL发表日期:2006-8-01

[HOW TO] 如何在Mozilla Gecko 用Javascript加载XSL发表日期:2006-8-01

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Mozilla加载xslt, XSLTProcessor,XMLSerializer

作者:Leave For Back 来源:CSDN 2008年3月23日

关键字: Web开发 to Gecko 加载 软件

  • 评论
  • 分享微博
  • 分享邮件

在Mozilla Develop Center里,我们可以看到有以下的文章
首先,你需要了解如何动态载入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>
<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==200return 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>
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章