一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_

上传人:一** 文档编号:24890570 上传时间:2021-07-15 格式:DOCX 页数:9 大小:14.38KB
收藏 版权申诉 举报 下载
一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)__第1页
第1页 / 共9页
一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)__第2页
第2页 / 共9页
一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)__第3页
第3页 / 共9页
资源描述:

《一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_》由会员分享,可在线阅读,更多相关《一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_(9页珍藏版)》请在装配图网上搜索。

1、一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_ 由于前面的方法xslt需要在xml文件内部挺直导入,而项目中用到的xml文件是系统生成的,只能供应路径,而没有方法改写xml里面的内容,所以需要找一个方法能够在外部将xml和xslt关联在一起,这样既达到了目的,也可以应用于多个xml文件,便利管理。 先上代码,系统中用法module这个js进行打包,module这个工具是特地用来将js进行打包,这个工具以后的文章再做介绍,我自己现在只会用法,还没讨论其底层的代码;这边我们将js写在一个文件里面,包括类以及类实现的方法, 下面是js代码:tr

2、ansform.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(arrSignaturesi); retur

3、n 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

4、.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 s

5、Xml; 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 =

6、 ; txt += br错误代码: ; txt += sError.errorCode; txt += br错误缘由: ; txt += sError.reason; txt += br错误行号: ; txt += sError.line; document.write(txt); else document.write(sResult); else if(document.implementation.createDocument) var oSerializer = new XMLSerializer(); var sXmlDom = oSerializer.serializeToStri

7、ng(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.writ

8、e(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 代码

9、如下: !DOCTYPE HTML PUBLIC -/W3C/DTD HTML 4.01 Transitional/EN html head meta http-equiv=Content-Type content=text/html; charset=utf-8 / script type=text/javascript src=transform.js/script /head body script type=text/javascript var XML = 这里输入XML路径; var XSL = 这里输入XSL路径; var tempObj = new TransformBinde

10、r(XML,XSL); tempObj.registerAction(transformXSLT); tempObj.bind(); /script /body /html 分析一下transform.js: xmlDom这个构造函数是用来创建xml的dom元素,对于IE和FF,创建dom的方法不一样,IE是用window.ActiveXObject这个方法来创建,而FF用document.implementation.createDocument这个方法来创建,我们用这两个属性来推断是IE还是FF。 IE下针对不同版本的xmlMSXML2.DOMDocument.5.0, MSXML2.DO

11、MDocument.4.0, MSXML2.DOMDocument.3.0, MSXML2.DOMDocument,Microsoft.XmlDom,用for循环进行遍历查找到对应的版本再new ActiveXObject(arrSignaturesi)建立dom; FF下用document.implementation.createDocument(, , null);挺直创建dom ; 假如扫瞄器不支持 XML DOM object则throw错误 。 transformXSLT这个构造函数用XSLT将xml转换成html,FF下没有transformNode这个方法,所以我们自己构造了一

12、个方法, 代码如下: 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); retu

13、rn sXml; 然后用这个方法实现转换,在处理错误上IE和FF又有不同的处理方法,IE比较简洁,有一个parseError属性装载错误信息,errorCode是错误的代码,reason是错误缘由,line是错误的行号,还有其他一些信息,这里只要显示主要的错误信息就可以了,假如出错了就显示出错内容,假如没有出错则显示转换的结果sResult。FF下就比较简单一点,用XMLSerializer和XMLSerializer.serializeToString()将xmlDom转换为字符串,再将字符串转换成dom对象,在转换的过程中假如报错,就能得到包含有parsererror的信息,推断得到的字符

14、串的tagName是不是parsererror,假如是则将dom对象再转换成字符串抛出字符串中的内容,假如不是则显示转换的结果sResult。 这里有几个留意点: a.IE能检验出XML的DTD错误,而FF下只能检验出XML本身的语法错误; b.由于需要在扫瞄器下推断错误,最终的结果不好合并,可能代码结构上看起来不太合理,这也是无奈之举。 用TransformBinder这个类进行封装,便于扩展和修改。TransformBinder.prototype.registerAction这个原型用于注册大事,再用TransformBinder.prototype.bind将大事进行绑定,需要用法这个类的时候,只需要new TransformBinder(XML,XSL),注册transformXSLT大事,再bind进行绑定,这样就实现这个效果了。假如需要扩展,再创建新的构造函数,注册并绑定到这个类上就可以实现效果。 更多信息请查看IT技术专栏 .

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!