日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

一個用xslt樣式將xml解析為xhtml的類TransformBinder(兼容FF和IE7.0)

瀏覽:544日期:2022-06-04 11:56:40
由于前面的方法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 += "<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(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");
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進行綁定,這樣就實現這個效果了。如果需要擴展,再創建新的構造函數,注冊并綁定到這個類上就可以實現效果。
標簽: XML/RSS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本精品在线中文字幕| 成人黄色av| 91精品一区二区三区综合在线爱| 国产乱码精品一区二区三区四区| 国产精品腿扒开做爽爽爽挤奶网站| 精品亚洲美女网站| 欧美~级网站不卡| 久久精品影视| 在线国产一区| 久久成人国产| 日韩高清国产一区在线| 欧美一级久久| 91欧美日韩| 中文精品在线| 国产精品久久久免费| 中文字幕在线免费观看视频| 久久精品高清| 日本aⅴ亚洲精品中文乱码| 国产精品久久久久久模特 | 国产精品亚洲欧美| 国产精品一页| 欧洲av一区二区| 亚洲精品成人一区| 国产欧洲在线| 亚洲精品一区二区在线播放∴| 国产精品视频一区二区三区四蜜臂 | 91欧美极品| 国产精品一区二区美女视频免费看 | 日本在线成人| 在线看片福利| 亚洲精品自拍| av亚洲免费| 福利一区在线| 欧美综合社区国产| 亚洲精品888| 91亚洲国产高清| 深夜福利一区| 亚洲综合精品| 国产中文欧美日韩在线| 日本一区二区三区视频在线看| 久久五月天小说| 国产福利91精品一区二区| 亚洲香蕉视频| 黑丝一区二区三区| 亚洲最新无码中文字幕久久| 日韩av中文字幕一区二区三区| 国产尤物精品| 欧美特黄一级大片| 中文字幕人成乱码在线观看| 国产精品s色| 欧美日本三区| 亚洲精品伊人| 日韩中文字幕视频网| 亚洲电影在线| 久久男人av资源站| 国产欧洲在线| 成人精品亚洲| 91精品在线观看国产| 亚洲精品一区三区三区在线观看| 精品视频国内| 日韩大片在线播放| 久久久水蜜桃av免费网站| 精品丝袜在线| 激情综合网五月| 国产农村妇女精品一区二区| 啪啪国产精品| 99热国内精品| 国产精品蜜月aⅴ在线| 日韩专区视频网站| 亚洲一区二区av| 免费一级片91| 91欧美日韩在线| 麻豆一区二区99久久久久| 国产乱人伦丫前精品视频| 欧美一区激情| 国产不卡一区| 午夜久久美女| 欧美三区不卡| 97欧美在线视频| 午夜久久福利| 91大神在线观看线路一区| 久久久91麻豆精品国产一区| 在线看片福利| 美女毛片一区二区三区四区| 久久国产高清| 欧美aⅴ一区二区三区视频| 精品免费av在线| 日韩激情啪啪| 久久久久国产精品一区二区| 免播放器亚洲一区| 麻豆国产精品视频| 欧美日韩国产探花| 日韩精品一区二区三区中文字幕| 久久精品资源| 蜜桃视频在线观看一区二区| 久久99国产精品视频| 国产婷婷精品| 日韩电影免费网站| 蜜臀久久99精品久久久久宅男| 精品色999| 日本不卡视频一二三区| 久久视频一区| 久久久久久久久成人| 最新日韩av| 成人福利av| 国产精品入口久久| 亚洲精品成a人ⅴ香蕉片| 久久中文亚洲字幕| 粉嫩av一区二区三区四区五区| 日韩影院免费视频| 日韩网站中文字幕| 精品精品久久| 国产精品nxnn| 亚洲精品影视| 免费久久99精品国产| 免费观看久久av| 999国产精品永久免费视频app| 国产精品66| 人人爱人人干婷婷丁香亚洲| 亚洲精品在线国产| 日韩一区二区三区免费视频| 日韩制服丝袜先锋影音| 亚洲精品99| 亚洲二区三区不卡| 性欧美xxxx免费岛国不卡电影| 国产一区二区精品福利地址| 国产精品欧美一区二区三区不卡| 日本综合精品一区| 日韩欧美一区二区三区免费观看| 久久99免费视频| 久久av资源| 精品一区二区三区视频在线播放| 国产日韩亚洲欧美精品| 国产精品1区| 国产不卡一区| 亚洲午夜精品久久久久久app| 99久久久久久中文字幕一区| 欧美va天堂| 麻豆精品91| 久久国内精品| 国产精品男女| 亚洲va中文在线播放免费| 国内精品福利| 水蜜桃久久夜色精品一区的特点| 久热综合在线亚洲精品| 日本在线不卡视频| 久久精品国产99| 欧美成人午夜| 国产欧美日韩视频在线| 97精品一区| 综合亚洲视频| 九九久久国产| 亚洲深爱激情| 精品九九久久| 综合欧美精品| 天堂√8在线中文| 亚洲最大av| 欧美成人基地 | 久久视频国产| 日韩av一区二区在线影视| 久久这里只有精品一区二区| 欧美91福利在线观看| 欧美午夜网站| 黄色精品网站| 国产中文欧美日韩在线| 一区二区三区国产在线| 福利一区和二区| 午夜天堂精品久久久久| 久久激情中文| 日韩不卡免费视频| 激情综合网站| 黑人精品一区| 精品国产亚洲一区二区在线观看| 亚洲欧美专区| 国产精品试看| 国产99精品| 中文在线а√天堂| 欧美国产另类| 欧美日一区二区三区在线观看国产免 | 日韩中文字幕无砖| 欧美在线亚洲| 裤袜国产欧美精品一区| 国产欧美一区二区色老头| 中文字幕日韩欧美精品高清在线| 成人看片网站| 日韩在线高清| 91视频久久| 福利精品一区| 久久一区欧美| 麻豆视频一区| 麻豆精品视频在线观看| 国产精品毛片久久久| 91精品福利观看| 国产情侣一区| 国产精品videosex极品| 国产麻豆一区二区三区精品视频| 亚洲毛片网站| 91精品麻豆| 国产精品一区二区av日韩在线| 欧美一区激情|