中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

一個用xslt樣式將xml解析為xhtml的類TransformBinder(兼容FF和IE7.0)
來源:易賢網(wǎng) 閱讀:1321 次 日期:2014-08-10 17:16:55
溫馨提示:易賢網(wǎng)小編為您整理了“一個用xslt樣式將xml解析為xhtml的類TransformBinder(兼容FF和IE7.0)”,方便廣大網(wǎng)友查閱!

由于前面的方法xslt需要在xml文件內(nèi)部直接導(dǎo)入,而項目中用到的xml文件是系統(tǒng)生成的,只能提供路徑,而沒有辦法改寫xml里面的內(nèi)容,所以需要找一個方法能夠在外部將xml和xslt關(guān)聯(lián)在一起,這樣既達到了目的,也可以應(yīng)用于多個xml文件,方便管理。

先上代碼,系統(tǒng)中使用module這個js進行打包,module這個工具是專門用來將js進行打包,這個工具以后的文章再做介紹,我自己現(xiàn)在只會使用,還沒研究其底層的代碼;這邊我們將js寫在一個文件里面,包括類以及類實現(xiàn)的方法,

下面是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("你的系統(tǒng)沒有安裝 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這個構(gòu)造函數(shù)是用來創(chuàng)建xml的dom元素,對于IE和FF,創(chuàng)建dom的方法不一樣,IE是用window.ActiveXObject這個方法來創(chuàng)建,而FF用document.implementation.createDocument這個方法來創(chuàng)建,我們用這兩個屬性來判斷是IE還是FF。

IE下針對不同版本的xml["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument","Microsoft.XmlDom"],用for循環(huán)進行遍歷查找到對應(yīng)的版本再new ActiveXObject(arrSignatures[i])建立dom;

FF下用document.implementation.createDocument("", "", null);直接創(chuàng)建dom ;

如果瀏覽器不支持 XML DOM object則throw錯誤 。

transformXSLT這個構(gòu)造函數(shù)用XSLT將xml轉(zhuǎn)換成html,F(xiàn)F下沒有transformNode這個方法,所以我們自己構(gòu)造了一個方法,

代碼如下:

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;

}

然后用這個方法實現(xiàn)轉(zhuǎn)換,在處理錯誤上IE和FF又有不同的處理方法,IE比較簡單,有一個parseError屬性裝載錯誤信息,errorCode是錯誤的代碼,reason是錯誤原因,line是錯誤的行號,還有其他一些信息,這里只要顯示主要的錯誤信息就可以了,如果出錯了就顯示出錯內(nèi)容,如果沒有出錯則顯示轉(zhuǎn)換的結(jié)果sResult。FF下就比較復(fù)雜一點,用XMLSerializer和XMLSerializer.serializeToString()將xmlDom轉(zhuǎn)換為字符串,再將字符串轉(zhuǎn)換成dom對象,在轉(zhuǎn)換的過程中如果報錯,就能得到包含有parsererror的信息,判斷得到的字符串的tagName是不是parsererror,如果是則將dom對象再轉(zhuǎn)換成字符串拋出字符串中的內(nèi)容,如果不是則顯示轉(zhuǎn)換的結(jié)果sResult。

這里有幾個注意點:

a.IE能檢驗出XML的DTD錯誤,而FF下只能檢驗出XML本身的語法錯誤;

b.因為需要在瀏覽器下判斷錯誤,最終的結(jié)果不好合并,可能代碼結(jié)構(gòu)上看起來不太合理,這也是無奈之舉。

用TransformBinder這個類進行封裝,便于擴展和修改。TransformBinder.prototype.registerAction這個原型用于注冊事件,再用TransformBinder.prototype.bind將事件進行綁定,需要使用這個類的時候,只需要new TransformBinder(XML,XSL),注冊transformXSLT事件,再bind進行綁定,這樣就實現(xiàn)這個效果了。如果需要擴展,再創(chuàng)建新的構(gòu)造函數(shù),注冊并綁定到這個類上就可以實現(xiàn)效果。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
成人精品一区二区三区四区| 99久久精品费精品国产一区二区| 国产一区二区久久| 欧美日韩一本到| 日韩国产一区二| 久久一区二区三区国产精品| 久久精品国产**网站演员| 日韩三级免费观看| 成人一区在线观看| 亚洲欧美激情在线| 日韩欧美不卡在线观看视频| 国内精品伊人久久久久av一坑| 国产精品理论在线观看| 在线亚洲高清视频| 精品综合免费视频观看| 亚洲女同一区二区| 精品福利视频一区二区三区| 色悠久久久久综合欧美99| 日本午夜一本久久久综合| 亚洲国产高清不卡| 欧美日韩国产免费一区二区 | 国产成人在线视频网址| 亚洲欧美日韩精品久久久久| 精品国产一区二区三区不卡 | 亚洲色图.com| 26uuu国产日韩综合| 欧美日韩精品一区二区| 99精品久久只有精品| 激情久久久久久久久久久久久久久久| 亚洲欧美电影一区二区| 久久精品人人做人人综合 | 亚洲图片欧美色图| 亚洲国产精品成人综合色在线婷婷 | 国产风韵犹存在线视精品| 天天综合色天天综合色h| **欧美大码日韩| 精品国产乱码久久久久久图片 | 久久久美女毛片| 制服丝袜亚洲播放| 欧美三级日本三级少妇99| 成人免费看黄yyy456| 国产一区二区不卡老阿姨| 日本午夜精品一区二区三区电影| 一区二区三区在线免费观看| 中文字幕在线视频一区| 国产欧美日本一区视频| 国产日韩精品视频一区| 久久久精品影视| www国产精品av| 久久久99精品免费观看不卡| 精品国产亚洲一区二区三区在线观看| 欧美老年两性高潮| 欧美一区二区三区免费视频| 91精品午夜视频| 精品国产一区二区三区久久久蜜月| 欧美一卡二卡三卡| 精品国产一区二区三区不卡 | 亚洲精品一区在线观看| 欧美精品一区二区三区一线天视频| 日韩一区二区三免费高清| 欧美一级欧美三级| 精品国产免费人成电影在线观看四季 | 亚洲欧洲日产国产综合网| 18欧美亚洲精品| 亚洲综合区在线| 日本亚洲欧美天堂免费| 欧美aa在线视频| 国产一区久久久| av电影在线观看完整版一区二区| av资源站一区| 欧美剧情片在线观看| 精品久久国产字幕高潮| 中文一区二区在线观看| 亚洲女同女同女同女同女同69| 亚洲综合男人的天堂| 蜜臀99久久精品久久久久久软件| 黄色日韩三级电影| 色综合久久66| 精品欧美久久久| 国产精品久久网站| 日本中文字幕一区| 国产精品456露脸| 91黄色在线观看| 欧美精品一区视频| 一区二区成人在线| 韩国三级中文字幕hd久久精品| 波多野结衣一区二区三区 | 亚洲美女视频在线| 裸体歌舞表演一区二区| 99这里都是精品| 日韩一区二区精品在线观看| 国产精品久久久久久久裸模| 亚洲.国产.中文慕字在线| 盗摄精品av一区二区三区| 欧美精品色综合| 亚洲素人一区二区| 国产精品亚洲成人| 91精品国产全国免费观看| 亚洲私人黄色宅男| 国产成人午夜高潮毛片| 欧美日韩和欧美的一区二区| 国产精品欧美经典| 久久99精品久久久久久动态图| 色老汉av一区二区三区| 国产欧美日韩激情| 国产麻豆视频精品| 日韩精品中文字幕一区二区三区| 亚洲影院理伦片| 一本久道中文字幕精品亚洲嫩| 欧美激情一区二区在线| 国产自产2019最新不卡| 日韩一级黄色片| 亚洲国产精品精华液网站| 99精品视频免费在线观看| 中文字幕av在线一区二区三区| 国产精品自拍毛片| 2020国产精品自拍| 麻豆91在线播放| 日韩欧美卡一卡二| 美女脱光内衣内裤视频久久影院| 欧美群妇大交群中文字幕| 亚洲成人av中文| 51精品久久久久久久蜜臀| 偷拍与自拍一区| 欧美一级黄色大片| 青草国产精品久久久久久| 欧美高清视频不卡网| 亚洲第一狼人社区| 欧美日韩国产高清一区二区三区 | 国产在线视视频有精品| 欧美一级夜夜爽| 日韩电影免费在线看| 91精品国产综合久久蜜臀| 日韩avvvv在线播放| 日韩精品综合一本久道在线视频| 美女视频免费一区| 欧美成人三级在线| 国产精品亚洲视频| 亚洲欧洲成人精品av97| 日本韩国欧美三级| 天天色天天操综合| 亚洲精品在线免费播放| 成人黄色在线视频| 亚洲黄色片在线观看| 欧美日本高清视频在线观看| 精品亚洲porn| 最新国产の精品合集bt伙计| 色偷偷久久一区二区三区| 午夜国产精品影院在线观看| 精品国产百合女同互慰| a级高清视频欧美日韩| 亚洲午夜在线视频| 欧美哺乳videos| 99re在线精品| 乱一区二区av| 伊人色综合久久天天人手人婷| 欧美一区在线视频| 不卡一区二区在线| 婷婷激情综合网| 中文字幕电影一区| 3atv一区二区三区| 成人黄色在线看| 日韩经典一区二区| 国产精品久久久久婷婷二区次| 欧美日韩一级片网站| 国产精品一色哟哟哟| 亚洲精品免费看| 久久精品欧美一区二区三区不卡| 欧美日韩五月天| 成人aa视频在线观看| 久久超碰97中文字幕| 亚洲香蕉伊在人在线观| 国产精品乱码人人做人人爱| 日韩亚洲欧美高清| 91黄色激情网站| 国产 欧美在线| 老司机免费视频一区二区三区| 亚洲精品美国一| 777亚洲妇女| 99精品国产99久久久久久白柏| 免费在线观看一区| 亚洲一区免费视频| 亚洲欧美日韩小说| 日本一区二区免费在线观看视频 | 国产精品婷婷午夜在线观看| 日韩欧美在线影院| 欧美日韩日日摸| 91极品视觉盛宴| 99riav久久精品riav| 成人在线视频一区| 国产一区二区按摩在线观看| 美洲天堂一区二卡三卡四卡视频 | 成人免费高清在线观看| 国产一区二区三区免费观看| 美女国产一区二区| 青青草国产精品亚洲专区无| 天天操天天色综合| 三级久久三级久久| 三级影片在线观看欧美日韩一区二区| 亚洲专区一二三|