国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > XML > 正文

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

2024-09-05 20:55:01
字體:
來源:轉載
供稿:網友
由于前面的方法xslt需要在xml文件內部直接導入,而項目中用到的xml文件是系統生成的,只能提供路徑,而沒有辦法改寫xml里面的內容,所以需要找一個方法能夠在外部將xml和xslt關聯在一起,這樣既達到了目的,也可以應用于多個xml文件,方便管理。
先上代碼,系統中使用module這個js進行打包,module這個工具是專門用來將js進行打包,這個工具以后的文章再做介紹,我自己現在只會使用,還沒研究其底層的代碼;這邊我們將js寫在一個文件里面,包括類以及類實現的方法,
下面是js代碼:transform.js
復制代碼 代碼如下:www.56wlw.com

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
復制代碼 代碼如下:www.56wlw.com

<!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這個方法,所以我們自己構造了一個方法,
復制代碼 代碼如下:www.56wlw.com

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進行綁定,這樣就實現這個效果了。如果需要擴展,再創建新的構造函數,注冊并綁定到這個類上就可以實現效果。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产一级电影网| 玖玖在线视频| 2021av天天| 欧美日韩视频精品二区| 国产精品久久久高清免费| 国产美女被草| 欧洲有码在线视频| 嫩草在线播放| 国产三区视频在线观看| 国产永久免费高清在线观看视频| 最新av免费看| 国产精品99爱免费视频| 中文在线视频观看| 在线观看免费观看在线91| 精品美女调教视频| 亚洲欧美中文字幕在线观看| 欧美96在线| 国产亚洲精品自在线观看| 中文日本在线观看| 91福利在线免费| 在线看黄网址| 丁香综合在线| 日本福利在线观看| 国产98在线| 中文字幕欧美日韩在线不卡| 天天噜天天色| 狠狠狠狠狠狠操| 国产高清免费在线播放| 老师我好爽再深一点的视频| 在线亚洲电影| 国产福利热线视频| 中文字幕在线视频不卡| 亚洲an天堂an在线观看| 国产二区在线播放| 国产午夜精品一区理论片| 欧美日韩一区二区三区在线播放| 国产福利微拍精品一区二区| 最近中文字幕在线中文视频| 免费高清av| 久久久久久国产视频| 青草视频在线播放| 亚洲妇熟xxxx妇色黄| 在线视频中文字幕久| 国产偷倩在线播放| 国产一级免费看| 国产精品一二三区视频| 欧美精品se| 在线成人一区| 亚洲人在线播放| 青青草免费观看免费视频在线| a视频免费看| 免费在线看v| 黄色免费av| 日本中文字幕视频| 国产香蕉视频在线观看| 国产超碰在线| 精品av中文字幕在线毛片| 91黄色在线| 亚洲sss视频| 好男人免费精品视频| 99热在线免费观看| 国产黄a三级三级三级av在线看 | 国产在线一二三区| 国产麻豆视频免费观看| 国产精品伦一区二区三区级视频频| 国产亚洲精品拍拍拍拍拍| 国产高清视频在线观看| www.99av| 国产l精品国产亚洲区在线观看| 香蕉视频免费在线播放| 国产原创在线播放| 尤物在线视频观看| 高清色视频在线观看| 最近中文字幕mv免费高清在线| 国产va在线观看| 美女av在线播放| 国产精彩视频在线观看免费蜜芽| 亚洲wwwwww| 国产午夜精品一区理论片| 精品国产高清自在线一区二区三区 | av在线官网| 国产在线你懂得| 亚洲久草视频| 国产xxx在线| 国产乱子伦三级在线播放| 精品美女视频在线观看免费软件| 免费a级毛片在线观看| 在线欧美一级视频| 国产成人午夜精品| 中文字幕国产在线| 麻豆av在线| 牛牛热在线视频| av中文字幕在线看| 亚洲精品自拍区在线观看| 国产精品186在线观看在线播放 | 亚洲精品自产拍在线观看| 国产一卡2卡3卡免费网站| www.99av| 美女网站在线观看| 交换国产精品视频一区| 男人操女人免费网站| sm国产在线调教视频| 亚洲最新永久观看在线| 影音av资源站| 亚洲国产精品区| 亚洲精品男人| 伊人网在线视频| av一本在线| www在线视频| 久草福利资源在线视频| 大香伊人久久| 国产网站免费看| 精品视频在线一区二区| 精品美女在线观看视频在线观看| 在线观看免费高清完整| gogo高清在线播放免费| 久久精品蜜桃| 国产麻豆精品入口在线观看| 国产有码在线| 国产经典av| 日本视频在线观看一区二区三区| eeuss影影院www在线播放| 欧美精品久久久久久久小说| 国产免费麻豆视频| 国产日韩欧美第一页| 国产l精品国产亚洲区在线观看| 在线午夜视频| 天堂资源最新在线| 91嫩草在线播放| 久精品在线观看| 92国产在线视频| 国产中文在线| 精品视频一区二区观看| 国产免费网址| 亚洲а∨精品天堂在线| 最好2018中文免费视频| 91这里只有精品| 国产尤物视频在线| av一本在线| 国产精品久久久久久久牛牛| 免费黄网站在线观看| 2021天堂中文幕一二区在线观| 老鸭窝av在线| av免费网站在线观看| 中文字幕免费中文| 热99re久久精品这里都是免费| 国产精品xxx电影| 国产专区在线| www在线视频| 在线色视频网| ·天天天天操| 国产亚洲精品自在线观看| 成人精品福利| 黄色国产网站在线播放| 日本高清中文字幕在线| 中文岛国精品亚洲一区| 97影院秋霞午夜在线观看| 国产福利小视频在线| 国产寡妇树林野战在线播放| 国产视频资源| 国产福利在线免费观看| 国产精品入口麻豆免费| 国产一起色一起爱| 国产精品入口免费麻豆| 国产激情视频网址| 中文字幕2020第一页| 国产精品久久麻豆| 精品成人免费自拍视频 | 国产素人视频在线观看| 国产一级黄色大片| 国产黄色一级电影| 96久久久久久| 在线成人综合色一区| 啪啪免费视频一区| 国产免费黄网站| 国产欧美一区二区三区小说| 国产黄色大片在线观看| av在线二区| 欧美激情福利视频在线观看免费| 亚洲伊人网在线观看| 毛片视频免费观看| 国产网友自拍电影在线| 91午夜在线| 黄网站在线观看高清免费| 最新av免费看| av手机免费在线观看| 国产在线你懂得| 69国产精品| 九九热免费视频| 国产9色视频| 九七电影韩国女主播在线观看| 最新天堂资源在线资源| 在线中文字幕av| 波多野结衣久久高清免费| 中文字幕在线免费看| 香蕉视频免费在线播放| 最近高清中文在线字幕在线观看| 97国产视频| 国产网红在线观看| 久久精品视频免费看|