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

一個用xslt樣式將xml解析為xhtml的類TransformBinder(兼容FF和IE7.0)
來源:易賢網 閱讀:1359 次 日期: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技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
一本到不卡免费一区二区| 成人免费视频在线观看| 懂色av一区二区三区蜜臀| 亚洲自拍另类综合| 精品免费日韩av| 欧美综合视频在线观看| 国产高清不卡一区二区| 不卡高清视频专区| 老司机精品视频在线| 亚洲高清视频的网址| 欧美高清在线视频| 精品1区2区在线观看| 欧美日韩免费不卡视频一区二区三区| 国产成人午夜视频| 久久国产精品99久久人人澡| 亚洲成年人影院| 亚洲欧美日韩精品久久久久| 日本一区二区免费在线| 日韩欧美国产综合| 欧美日韩一区二区在线观看视频| 日本精品一区二区三区高清 | 日韩主播视频在线| 亚洲同性gay激情无套| 久久久九九九九| 日韩精品中文字幕一区二区三区| 91精品免费观看| 欧美日韩免费不卡视频一区二区三区| 色婷婷久久久综合中文字幕| 99天天综合性| 成人h精品动漫一区二区三区| 国产精品综合二区| 久久99精品久久久久久国产越南| 首页欧美精品中文字幕| 亚洲v中文字幕| 亚洲va韩国va欧美va| av中文字幕一区| 国产91丝袜在线播放0| 国产精品自拍在线| 国产乱子轮精品视频| 精品午夜久久福利影院| 国产又黄又大久久| 国产伦精品一区二区三区免费迷| 国产中文字幕精品| 国产99久久久国产精品免费看| 国产精品情趣视频| 欧美成人国产一区二区| 日韩午夜激情电影| 欧美精品一区二区久久久| 亚洲精品一区在线观看| 久久欧美一区二区| 国产精品免费视频网站| 亚洲人成网站影音先锋播放| 亚洲一二三区在线观看| 日韩精品一区第一页| 老司机免费视频一区二区三区| 精品在线观看视频| 国产高清在线精品| 99精品视频在线免费观看| 色妞www精品视频| 欧美四级电影在线观看| 日韩视频免费直播| 欧美激情资源网| 亚洲一区在线视频| 青青草伊人久久| 国产成人a级片| 色www精品视频在线观看| 5858s免费视频成人| 精品少妇一区二区三区在线播放| 中文字幕的久久| 亚洲影视在线播放| 韩国女主播一区| 97se亚洲国产综合自在线| 欧美日韩国产精品成人| 久久久久久一二三区| 亚洲欧美一区二区在线观看| 亚洲成a人片在线观看中文| 精品无码三级在线观看视频| 91免费观看国产| 91精品国产综合久久婷婷香蕉| 国产亚洲制服色| 亚洲一区二区三区精品在线| 国产乱一区二区| 日本精品一区二区三区高清| 精品久久久三级丝袜| 一区二区三区在线观看国产| 久久精品久久综合| 一本色道久久加勒比精品| 日韩欧美高清dvd碟片| 亚洲精品日日夜夜| 国内精品久久久久影院薰衣草| 91日韩一区二区三区| 亚洲精品一区二区三区四区高清 | 亚洲主播在线播放| 国产在线视频不卡二| 91黄色激情网站| 亚洲.国产.中文慕字在线| 国产成人精品三级麻豆| 日韩欧美色综合网站| 亚洲精品第一国产综合野| 国产精品1区二区.| 91精品免费观看| 亚洲国产精品影院| 99久久精品免费观看| 久久综合视频网| 欧美丰满少妇xxxbbb| 久久久久久久久久久久电影| 亚洲国产精品久久人人爱蜜臀| 成人丝袜18视频在线观看| 欧美一区二区三区视频免费播放| 亚洲免费色视频| 成人91在线观看| 国产欧美日韩中文久久| 激情综合色播激情啊| 欧美精品精品一区| 亚洲免费在线电影| 成人在线视频一区| www久久久久| 久久狠狠亚洲综合| 欧美一区二区福利在线| 亚洲国产精品嫩草影院| 在线观看一区二区精品视频| 最新国产成人在线观看| 99国产麻豆精品| 中文字幕一区二区三区色视频| 国产成人啪免费观看软件| 久久久99久久精品欧美| 国产美女视频一区| 久久综合久久久久88| 国内精品第一页| 久久综合九色综合97婷婷女人| 麻豆91精品视频| 日韩一区二区在线免费观看| 日韩专区中文字幕一区二区| 欧美一级爆毛片| 麻豆一区二区三| 欧美精品一区在线观看| 国产成人精品亚洲午夜麻豆| 欧美国产日韩精品免费观看| 成人av免费在线观看| 亚洲女同一区二区| 91丨porny丨首页| 1000部国产精品成人观看| 国产精品久久久久久一区二区三区| 精品一区中文字幕| 欧美成人r级一区二区三区| 天天色天天爱天天射综合| 欧美另类z0zxhd电影| 免费人成在线不卡| 欧美一区二区美女| 久久99精品久久久久久久久久久久| 久久久蜜桃精品| 成人精品免费看| 亚洲激情自拍偷拍| 久久久久久久久蜜桃| 成人黄色小视频| 亚洲精品日韩专区silk| 欧美日本精品一区二区三区| 美女国产一区二区| 国产欧美日本一区二区三区| 97久久超碰国产精品电影| 国产大片一区二区| 久久久国际精品| 91麻豆精品在线观看| 亚洲一区国产视频| 日韩视频在线永久播放| 国产成人夜色高潮福利影视| 依依成人精品视频| 91精品国产综合久久精品麻豆| 久久精工是国产品牌吗| 国产精品久久久久永久免费观看| 欧洲精品一区二区| 久色婷婷小香蕉久久| 亚洲视频在线一区观看| 在线91免费看| 成人app在线观看| 午夜精品一区二区三区三上悠亚| 久久久久久电影| 欧美系列在线观看| 国产成人自拍在线| 亚洲国产成人91porn| 久久先锋影音av鲁色资源网| 91福利国产成人精品照片| 一级中文字幕一区二区| 久久影音资源网| 欧美日韩一区国产| 国产精品一品二品| 日韩中文字幕一区二区三区| 国产精品全国免费观看高清 | 精品国产一区二区三区久久久蜜月| 99re66热这里只有精品3直播| 视频一区欧美精品| 国产精品久久久久影院色老大| 日韩精品影音先锋| 色综合视频在线观看| 久久91精品久久久久久秒播| 樱桃视频在线观看一区| 欧美激情一区在线| 欧美成人女星排名| 在线播放视频一区| 色综合久久中文字幕|