zoukankan      html  css  js  c++  java
  • xsl xml 以及 树的编写(原创)

    来公司这么长时间一直到现在一直在iaas项目中辗转。

    利用xml的特性将数据独立出,达到UI和Db真正的分离。


    1 了解知识:

    1.xsl是xml的格式文件, xml是数据文件

    2 调试方法:

      1)在xsl内容中嵌套javascript从而简介调试查看xsl的中间结果,通过查看xsl+xml形成的结果htm

      2)vs自带了一个功能强大的调试器,专门针对此用法如下:(不懂可以问msdn)

    View Code
    namespace 调试
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                XslCompiledTransform xslt = new XslCompiledTransform(true);//true 开启调试
                // load the style sheet.
                xslt.Load("demo.xsl");
    
                xslt.Transform("demo.xml", "demo.htm");
                Console.Read();
            }
        }
    }

      适当加断点,可跳进xsl中的循环调试,也可以变量监视。很好用。


    2 Javascript结合xsl xml

     xsl和xml你都有了, 如何将格式套用入数据?

    1 跨域加载xml

    此时,倘若你想要的xml涉及跨域问题,那么在输出xml的服务器上必须加Header。Access-Control-Allow-Origin: * !(因为此问题困然我两天)你才能访问到该xml,否则firfox下无法读取。因为ie下,设置interne选项中参数便可以访问!具体问google或者私密我。

     加载文件如下:

    View Code
    //读取本地数据
    function xmlGetResponse(_url) {
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.open("GET", _url, false);
        xmlhttp.send();
        return xmlhttp.responseXML;
    //如果responseXML内无数据 可查看responeText核查
    }

    其中如果responseXML.xml='' &&responseText不为空。可将responseText转化为dom,返回是结果一样的。

    View Code
     if (!xhttp.responseXML.xml) {
            //转化为dom
            try {
                if (window.ActiveXObject) {
                    var xmlobject = new ActiveXObject("Microsoft.XMLDOM");
                    xmlobject.async = "false";
                    xmlobject.loadXML(xhttp.responseText);
                    return xmlobject;
                }
                else {//firfox下特殊
                    var parser = new DOMParser();
                    var xmlobject = parser.parseFromString(xhttp.responseText, "text/xml");
                    return xmlobject;
                }
    
            } catch (e) {
            }

    2 加载xsl

    加载方式同加载xml一样,xsl也是标签语言哦,成双成对的。

    2 二者结合

    用代码说话:

    View Code
    function xmlGetResponse(_urlxml, _urlxsl) {
        var xml = loadXMLDoc(_urlxml);//加载xml
        var xsl = loadXMLDoc( _urlxsl);//加载xsl
        if (window.ActiveXObject) { //ie
            ex = xml.transformNode(xsl);//结合,结果ex是形成的htm
        }
        else if (document.implementation && document.implementation.createDocument) {
     //其他浏览器如firfox
            xsltProcessor = new XSLTProcessor();
            xsltProcessor.importStylesheet(xsl);
            resultDocument = xsltProcessor.transformToFragment(xml, document);
            document.getElementById(id).appendChild(resultDocument);
    //结合,结果resultDocument是形成的htm
        }
    }

    3 xml+xsl ->tree!形成树

    主要的xsl逻辑代码我会共享给大家,也算是我这两天的埋头研究没有浪费。

     1)主要思路

      a.找到根节点,便利其子节点,其中读取属性等等你需要的值,并输出(根据要求可以加上js效果)

      b.递归循环找出所有子节点并展现出树的层次

      c.我认为最难的点:输出树节点 前方的虚线。不知能否理解。如果你有用到,你就知道

     2)主要难点

     a.模块的调用和传参! 形成递归(不用递归当然更好)

     b.计数 当前节点的父节点,父节点的兄弟节点,父节点的子节点中在本节点之后兄弟节点。。。。等等 

       最好慢慢研究http://www.w3school.com.cn/xpath/http://www.w3school.com.cn/xsl/ 

       说的简洁但是意义很大。慢慢理解。

     c.递归输出前方虚线图片。

    由于时间限制,讲的比较笼统。见谅

    下载地址

    https://files.cnblogs.com/akak123/xmlTreeTest.zip

  • 相关阅读:
    python
    shader example
    shader 关键字
    Android Studio如何导出可供Unity使用的aar插件详解 转
    adb
    知识
    Unity实现模拟按键
    小知识
    图种制作命令
    八卦
  • 原文地址:https://www.cnblogs.com/akak123/p/2837541.html
Copyright © 2011-2022 走看看