一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)(一个用英语怎么说)干货满满

随心笔谈2年前发布 admin
173 0 0

文章摘要

本文介绍了如何在不同浏览器中实现XML DOM对象和XSLT转换器的功能。文章分为以下主要内容: 1. **XML DOM对象创建**: - 在IE中,使用`ActiveXObject`创建不同的DOM实现(MSXML2、Microsoft等)。 - 在Firefox中,使用`document.implementation.createDocument`创建DOM对象。 - 提供错误处理,提示系统未安装MSXML。 2. **XSLT转换实现**: - 使用`transformXSLT`函数处理XSLT转换,支持异步模式。 - 包括XSLT样式表导入、节点转换以及结果错误处理。 3. **错误处理与结果展示**: - 对于IE,检查DOM对象解析错误,显示错误代码、原因和行号。 - 对于Firefox,处理解析错误,显示DOM对象或 alert 错误信息。 4. **TransformBinder接口**: - 提供注册和绑定转换动作的能力,用于扩展转换功能。 文章整体展示了如何在不同浏览器环境中实现完整的XML DOM和XSLT转换功能,包括错误处理和用户友好的结果展示。

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);

}

© 版权声明

相关文章