欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOCX文档下载
 

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

  • 资源ID:24890570       资源大小:14.38KB        全文页数:9页
  • 资源格式: DOCX        下载积分:12积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要12积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_ 由于前面的方法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(arrSignaturesi); 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 += "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.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 代码如下: !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 TransformBinder(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下针对不同版本的xml"MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.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这个方法,所以我们自己构造了一个方法, 代码如下: 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; 然后用这个方法实现转换,在处理错误上IE和FF又有不同的处理方法,IE比较简洁,有一个parseError属性装载错误信息,errorCode是错误的代码,reason是错误缘由,line是错误的行号,还有其他一些信息,这里只要显示主要的错误信息就可以了,假如出错了就显示出错内容,假如没有出错则显示转换的结果sResult。FF下就比较简单一点,用XMLSerializer和XMLSerializer.serializeToString()将xmlDom转换为字符串,再将字符串转换成dom对象,在转换的过程中假如报错,就能得到包含有parsererror的信息,推断得到的字符串的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技术专栏 .

注意事项

本文(一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)_)为本站会员(一**)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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