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

一個用xslt樣式將xml解析為xhtml的類TransformBinder(兼容FF和IE7.0)
來源:易賢網 閱讀:1256 次 日期:2014-08-10 17:16:55
溫馨提示:易賢網小編為您整理了“一個用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(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進行綁定,這樣就實現這個效果了。如果需要擴展,再創建新的構造函數,注冊并綁定到這個類上就可以實現效果。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲第一精品电影| 亚洲国产美女久久久久| 精品91久久久久| 国产精品一区二区你懂得 | 欧美在线短视频| 精品91免费| 国产精品xvideos88| 久久人人看视频| 亚洲人体大胆视频| 免费亚洲一区| 久久av一区二区三区| 一本色道久久88精品综合| 国产区精品视频| 欧美日韩在线精品| 久久久久久黄| 午夜精彩视频在线观看不卡| 在线欧美视频| 国产日韩欧美在线| 欧美日韩亚洲网| 欧美日韩大片| 免费成人美女女| 亚洲欧美综合| 久久国产精品久久精品国产 | 中文精品在线| 亚洲一区日本| 亚洲欧美综合一区| 久久成人免费| 欧美高清在线一区| 欧美美女福利视频| 欧美婷婷六月丁香综合色| 国产精品国产三级国产普通话三级 | 性欧美8khd高清极品| 亚洲免费成人av| 一二三四社区欧美黄| 久久动漫亚洲| 欧美日韩国产a| 国产精品视区| 亚洲大胆女人| 亚洲一二三区在线| 欧美一区二区三区免费观看| 老妇喷水一区二区三区| 欧美精品一区二区三区四区| 国产精品久久久久久久久久尿| 欧美日韩影院| 一区二区三区在线看| 亚洲午夜女主播在线直播| 久久亚洲私人国产精品va| 国产精品久久97| 欧美一区二区三区四区夜夜大片 | 亚洲色图自拍| 久久综合给合久久狠狠狠97色69| 欧美精品久久久久久| 国产精品手机在线| 亚洲国产欧美一区二区三区久久 | 欧美精品久久久久久久久老牛影院 | 红桃视频一区| 欧美在现视频| 国产精品自拍小视频| 亚洲性xxxx| 国产精品毛片大码女人| 这里只有视频精品| 国产精品美女www爽爽爽| 亚洲永久视频| 国产亚洲精品成人av久久ww| 亚洲综合色噜噜狠狠| 国产精品视频一区二区三区| 一区二区三区视频在线观看| 欧美日韩大陆在线| 亚洲综合电影| 一色屋精品亚洲香蕉网站| 乱码第一页成人| 亚洲级视频在线观看免费1级| 欧美大片在线观看一区| 亚洲精品国偷自产在线99热| 欧美精品99| 亚欧成人在线| 在线观看亚洲精品| 美女亚洲精品| 亚洲视频网在线直播| 亚洲国产成人91精品| 先锋影音一区二区三区| 国产一区二区三区视频在线观看| 亚洲影院在线观看| 一区二区亚洲精品国产| 欧美日韩精品欧美日韩精品一| 99视频精品全部免费在线| 国产精品视频在线观看| 欧美黄色大片网站| 欧美一级播放| 亚洲桃色在线一区| 亚洲一区二区网站| 狠狠色狠狠色综合系列| 欧美亚州一区二区三区| 欧美精品日韩精品| 欧美激情亚洲另类| 免费不卡中文字幕视频| 黄色亚洲大片免费在线观看| 欧美一二三视频| 午夜国产欧美理论在线播放| 日韩一级精品| 亚洲天堂av高清| 亚洲欧美精品在线观看| 亚洲欧美日韩国产精品| 亚洲综合电影一区二区三区| 亚洲伊人第一页| 久久国产精品久久国产精品 | 激情国产一区| 欧美激情综合五月色丁香小说| 久久亚洲精品视频| 欧美高清不卡| 欧美三级日本三级少妇99| 国产精品久久久91| 极品日韩久久| 亚洲视频每日更新| 久久久精品视频成人| 欧美成人嫩草网站| 国产精品欧美日韩一区二区| 黑人巨大精品欧美一区二区 | 国产一区二区三区视频在线观看| 国产精品ⅴa在线观看h| 黄色亚洲在线| 亚洲欧美激情视频| 久久先锋影音| 国产日韩在线视频| 最新国产乱人伦偷精品免费网站| 亚洲午夜久久久久久久久电影网| 久久精品最新地址| 国产精品久久久久秋霞鲁丝| 亚洲国产高清自拍| 欧美专区日韩专区| 国产精品美女久久久久av超清| 在线免费观看视频一区| 亚洲欧美日韩国产中文| 欧美国产极速在线| 91久久精品国产| 久久免费视频在线| 精品成人一区二区| 久久久久久一区二区三区| 国产视频在线观看一区二区三区| 亚洲一区二区免费| 国产精品青草久久| 亚洲一区影音先锋| 国产精品久久久久久久久搜平片 | 国产日韩一级二级三级| 亚洲一区二区三区国产| 欧美日韩精品不卡| 99国产精品久久久| 欧美天天视频| 欧美中文字幕在线视频| 国产亚洲成年网址在线观看| 欧美专区日韩视频| 极品尤物av久久免费看| 欧美福利在线| 亚洲综合精品自拍| 国产日韩欧美电影在线观看| 欧美中日韩免费视频| 亚洲成在人线av| 国产精品欧美一区二区三区奶水| 午夜在线一区| 这里只有精品在线播放| 国产亚洲欧美日韩在线一区| 嫩模写真一区二区三区三州| 91久久久久久久久| 国产精品一区二区三区久久久| 欧美一区二区三区精品电影| 亚洲高清久久| 国产专区一区| 国产精品亚洲综合| 欧美日韩国产二区| 欧美在线视频全部完| 亚洲综合另类| 亚洲视频香蕉人妖| 日韩视频在线观看| 国产精品一卡二| 国产精品久久影院| 欧美日韩p片| 欧美日韩喷水| 国产精品www网站| 国产精品高潮呻吟久久| 欧美在线播放高清精品| 在线一区观看| 亚洲精品久久久久久下一站 | 香蕉精品999视频一区二区| 欧美护士18xxxxhd| 你懂的成人av| 欧美日韩三级一区二区| 久久久久在线观看| 久久aⅴ国产紧身牛仔裤| 香蕉精品999视频一区二区| 欧美一区二区日韩| 久久视频在线免费观看| 亚洲视频在线一区| 亚洲欧美日韩一区二区在线| 亚洲自拍偷拍网址| 久久精品在线免费观看| 99国产精品99久久久久久| 99xxxx成人网| 久久久xxx| 国产精品网曝门| 亚洲日本理论电影|