新梦网彩票官网

會員投稿 匿名投稿 投稿指南 RSS訂閱 楚天站長站推薦:
搜索: 您的位置主頁 > 網絡編程 > Xml編程 > 閱讀資訊︰一個用xslt樣式將xml解析為xhtml的類TransformBinder

新梦网彩票官网

2011-10-14 21:01:30 來源:楚天站長站 【 】 點擊:次 我要投稿 發表評論

這幾天不斷在研討xslt轉換xml為xhtml,前面文章有引見 運用xslt將xml解析成xhtml 的文章
因為前面的辦法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 += \"
錯誤代碼︰ \";
txt += sError.errorCode;
txt += \"
錯誤緣由︰ \";
txt += sError.reason;
txt += \"
錯誤行號︰ \";
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
復制代碼 代碼如下:

剖析一下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\");

感謝 靚哥 的投稿 本文僅代表作者觀點,與楚天站長站立場無關。

分享到︰

共2頁: 上一頁12下一頁

數據統計中!!

tags︰xhtml,的類,TransformBinder,解析,xm

 責任編輯︰靚哥
  • 相關文章列表                                                                                     收藏 - 挑錯 - 推薦 - 打印
    評論總數︰ [ 查看全部 ] 網友評論