加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML系列:xsl与xml组织数据

发布时间:2020-12-16 09:28:52 所属栏目:百科 来源:网络整理
导读:到w3c看一下,xml的家族的确有点庞大,包括xml,xsl,xpath等等,http://www.w3school.com.cn/x.asp 其中,xml+xsl的组合为我们很好的将模板与数据分离。 下面是一段js解析xsl与xml生成html的代码: 1 // 由于我们在移动平台上用,所以不兼容 ie 2 3 // 使用

到w3c看一下,xml的家族的确有点庞大,包括xml,xsl,xpath等等,http://www.w3school.com.cn/x.asp

其中,xml+xsl的组合为我们很好的将模板与数据分离。

下面是一段js解析xsl与xml生成html的代码:

 1 // 由于我们在移动平台上用,所以不兼容 ie
 2   
 3 // 使用方法 
 4 $(function() {  5    //$('#xsl').xslt("data.xml","view.xsl");
 6 });  7 
 8 // xslt transform
 9 $.fn.xslt = function(xml,xsl){ 10     var target = $(this); 11     // Mozilla 0.9.4+,Opera 9+
12     var xmlContent = xmlFromFile(xml); 13     var xslContent = xmlFromFile(xsl); 14     var html = xslTransform(xmlContent,xslContent); 15  target.empty().append(html); 16 } 17 
18 
19 function xslTransform(xml,xslt) 20 { 21     
22     var html = "" ; 23     try { 24         if (window.DOMParser != undefined && window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { 25             //// Load XML 
26             var xmlDoc = new DOMParser().parseFromString(xml,"text/xml"); 27             //// Load XSL
28             var processor = new XSLTProcessor(); 29  processor.importStylesheet(xslt); 30             
31             // Transform
32             resultDocument = processor.transformToFragment(xml,document); 33             if (document.implementation && document.implementation.createDocument) { 34                 html =  new XMLSerializer().serializeToString( resultDocument ) ; 35  } 36  } 37     } catch (exception) { 38         if (typeof (exception) == "object") { 39             if (exception.message) { 40  alert(exception.message); 41  } 42         } else { 43  alert(exception); 44  } 45  } 46     //打印错误信息
47     var errorMsg = null; 48     if (xmlDoc.parseError && xmlDoc.parseError.errorCode != 0) { 49         errorMsg = "XML Parsing Error: " + xmlDoc.parseError.reason 50                   + " at line " + xmlDoc.parseError.line 51                   + " at position " + xmlDoc.parseError.linepos; 52  } 53     else { 54         if (xmlDoc.documentElement) { 55             if (xmlDoc.documentElement.nodeName == "parsererror") { 56                 errorMsg = xmlDoc.documentElement.childNodes[0].nodeValue; 57  } 58  } 59         else { 60             errorMsg = "XML Parsing Error!"; 61  } 62  } 63 
64     if (errorMsg) { 65         //alert (errorMsg);
66  } 67     return html ; 68 } 69 // 上面直接用 processor.transformToFragment 无法加载 xml文件, 我们需要用 XHR 先读进来 
70 // 这里通过 XHR 来获取 xml 内容 
71 function xmlFromFile(file) 72 { 73     var xmlDoc = null ; 74     try
75  { 76         if (document.implementation && document.implementation.createDocument){ 77             var xmlhttp = new window.XMLHttpRequest(); 78             xmlhttp.open("GET",file,false); 79             xmlhttp.send(null); 80             // 返回 document树, 可以用document.getElementsByTagName()等方法
81             xmlDoc = xmlhttp.responseXML ; 82  } 83         else
84  { 85             xmlDoc = null ; 86  } 87  } 88     catch(e) 89  { 90         error=e.message; 91  } 92     return xmlDoc; 93 }

还有xsl里面可以使用很多xpath的变量,条件判断等等,这让我们可以直接在xsl里面查询得到我们需要的数据。

xpath将在下一篇文章介绍...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读