立即登录 注册新帐号

http://www.chutianz.com - 楚天站长站

会员投稿 匿名投稿 投稿指南 RSS订阅 楚天站长站推荐:
搜索: 您的位置主页 > 网络编程 > Xml编程 > 阅读资讯:一个用xslt样式将xml解析为xhtml的类TransformBinder

一个用xslt样式将xml解析为xhtml的类TransformBinder

2011-10-14 21:01:30 来源:楚天站长站 【 】 点击:我要投稿 发表评论

这几天不断在研讨xslt转换xml为xhtml,前面文章有引见 运用xslt将xml解析成xhtml 的文章
因为前面的办法xslt需求在xml文件内部直接导入,而项目顶用到的xml文件是系统生成的,只能供应途径,而没有方法改写xml里面的内容,所以需求找一个办法可以在外部将xml和xslt联系关系在一同,如许既到达了目标,也可以使用于多个xml文件,便利治理。
       先上代码,系统中运用module这个js进行打包,module这个东西是专门用来将js进行打包,这个东西今后的文章再做引见,我本人目前只会运用,还没研讨其底层的代码;这边我们将js写在一个文件里面,包罗类以及类完成的办法,
下面是js代码:transform.js
复制代码 代码如下:
var XmlDom=function(){
if (window.ActiveXObject) { // IE
var arrSignatures = [\"MSXML2.DOMDocument.5.0\", \"MSXML2.DOMDocument.4.0\",
\"MSXML2.DOMDocument.3.0\", \"MSXML2.DOMDocument\",
\"Microsoft.XmlDom\"];
for (var i=0; i < arrSignatures.length; i++) {
try {
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
} catch (oError) {
//ignore
}
}
throw new Error(\"你的系统没有装置 MSXML.\");
} else if(document.implementation.createDocument){ // Firefox
var oXmlDom = document.implementation.createDocument(\"\", \"\", null);
return oXmlDom;
} else{
throw new Error(\"阅读器不支撑 XML DOM object.\");
}
}
var transformXSLT=function(_XML,_XSL) {
if (window.Node) {
Node.prototype.transformNode = function(XslDom) {
var oProcessor = new XSLTProcessor();
oProcessor.importStylesheet(XslDom);
var oResultDom = oProcessor.transformToDocument(myXmlDom);
var oSerializer = new XMLSerializer();
var sXml = oSerializer.serializeToString(oResultDom, \"text/xml\");
return sXml;
}
}
var myXmlDom = new XmlDom();
myXmlDom.async=false;
var myXslDom = new XmlDom();
myXslDom.async=false;
myXmlDom.load(_XML);
myXslDom.load(_XSL);
var sResult=myXmlDom.transformNode(myXslDom);
if(window.ActiveXObject){
if(myXmlDom.parseError.errorCode != 0){
var sError=myXmlDom.parseError;
var txt = \"\";
txt += \"
错误代码: \";
txt += sError.errorCode;
txt += \"
错误缘由: \";
txt += sError.reason;
txt += \"
错误行号: \";
txt += sError.line;
document.write(txt);
}else{
document.write(sResult);
}
} else if(document.implementation.createDocument){
var oSerializer = new XMLSerializer();
var sXmlDom = oSerializer.serializeToString(myXmlDom, \"text/xml\");
var oParser = new DOMParser();
var oXmlDom = oParser.parseFromString(sXmlDom,\"text/xml\");
if (oXmlDom.documentElement.tagName == \"parsererror\") {
var oXmlSerializer = new XMLSerializer();
var sXmlError = oXmlSerializer.serializeToString(oXmlDom);
alert(sXmlError);
} else {
document.write(sResult);
}
}
}
var TransformBinder = function(XML,XSL) {
this.XML = XML;
this.XSL = XSL;
}
TransformBinder.prototype.registerAction = function(handlers) {
this.handlers = handlers;
}
TransformBinder.prototype.bind = function() {
var _this = this;
this.handlers(_this.XML,_this.XSL);
}

下面是html代码:XSLTtransform.htm
复制代码 代码如下:

剖析一下transform.js:
       xmlDom这个结构函数是用来创立xml的dom元素,关于IE和FF,创立dom的办法纷歧样,IE是用window.ActiveXObject这个办法来创立,而FF用document.implementation.createDocument这个办法来创立,我们用这两个属性来判别是IE照样FF。
       IE下针对分歧版本的xml[\"MSXML2.DOMDocument.5.0\", \"MSXML2.DOMDocument.4.0\", \"MSXML2.DOMDocument.3.0\", \"MSXML2.DOMDocument\",\"Microsoft.XmlDom\"],用for轮回进行遍历查找到对应的版本再new ActiveXObject(arrSignatures[i])树立dom;
FF下用document.implementation.createDocument(\"\", \"\", null);直接创立dom ;
假如阅读器不支撑 XML DOM object则throw错误 。
transformXSLT这个结构函数用XSLT将xml转换成html,FF下没有transformNode这个办法,所以我们本人结构了一个办法,
复制代码 代码如下:
Node.prototype.transformNode = function(XslDom) {
var oProcessor = new XSLTProcessor();
oProcessor.importStylesheet(XslDom);
var oResultDom = oProcessor.transformToDocument(myXmlDom);
var oSerializer = new XMLSerializer();
var sXml = oSerializer.serializeToString(oResultDom, \"text/xml\");

感谢 靓哥 的投稿 本文仅代表作者观点,与楚天站长站立场无关。

分享到:

共2页: 上一页12下一页

数据统计中!!

tags:xhtml,的类,TransformBinder,解析,xm

 责任编辑:靓哥
  • 相关文章列表                                                                                     收藏 - 挑错 - 推荐 - 打印
    评论总数: [ 查看全部 ] 网友评论