• XML系列:xsl与xml组织数据


    到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将在下一篇文章介绍...

  • 相关阅读:
    SOA概念误解实施要点
    Visual Studio 2008 和 .NET Framework 3.5 Service Pack 1 Beta 发布
    【翻译】使用LINQ来简化编程的7个技巧
    我对SOA的认识以及心得
    《SQL Server 2005范例代码查询辞典》出版
    Security Tutorials系列文章以及AJAX系列文章
    代朋友发招聘信息,C++程序员
    二叉树相关算法
    最近项目的一些心得(纯贴代码)
    大型互联网网站架构心得之一:分
  • 原文地址:https://www.cnblogs.com/trying/p/3027967.html
Copyright © 2020-2023  润新知