您的位置:首页 > Web前端 > JavaScript

利用Javascript读取xml文件,构建树型列表

2006-10-20 17:04 531 查看
 文中涉及到的xml文档如下:


<?xml version="1.0" standalone="yes"?>


<NewDataSet>


  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">


    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="CatalogInfoTb" msdata:UseCurrentLocale="true">


      <xs:complexType>


        <xs:choice minOccurs="0" maxOccurs="unbounded">


          <xs:element name="CatalogInfoTb" msprop:SelectStatement="select [OID],[ParentCatalog],[CatalogOrder] ,[CatalogName],[Remark] from CatalogInfoTb where 0=0 order by ParentCatalog,CatalogOrder">


            <xs:complexType>


              <xs:sequence>


                <xs:element name="OID" type="xs:string" minOccurs="0" />


                <xs:element name="ParentCatalog" type="xs:string" minOccurs="0" />


                <xs:element name="CatalogOrder" type="xs:int" minOccurs="0" />


                <xs:element name="CatalogName" type="xs:string" minOccurs="0" />


                <xs:element name="Remark" type="xs:string" minOccurs="0" />


              </xs:sequence>


            </xs:complexType>


          </xs:element>


        </xs:choice>


      </xs:complexType>


    </xs:element>


  </xs:schema>


  <CatalogInfoTb>


    <OID>6bb0b669e5c448e5bed57cf377a45837</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>教育咨询</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>2d8ffc093d404d3dbaa0e03cf93617bb</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>学习天地</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>902c40a1118a45d993753c71f0629e64</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>教师天地</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>600cef96ab8942b58ea70d3781769607</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>4</CatalogOrder>


    <CatalogName>在线考试</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>e94621ce9fd64175a71efaf8af39a22e</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>5</CatalogOrder>


    <CatalogName>学科博览</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>ed07b1dbfd394901a8a64e947e11d07b</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>6</CatalogOrder>


    <CatalogName>下载中心</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>03f8a1e4a0004e8dbede0edf9879fda0</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>7</CatalogOrder>


    <CatalogName>图书参考</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>dd21f7c0ec404fcdb978b74da83ee0f2</OID>


    <ParentCatalog>0</ParentCatalog>


    <CatalogOrder>8</CatalogOrder>


    <CatalogName>在线论坛</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>83711cd0aa4e4fb88ecdabea9fc0596d</OID>


    <ParentCatalog>12b427191f8443db8e9425c0c7d12320</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>高考动态</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>6feb3519e33341e7b9e6b80274e53d04</OID>


    <ParentCatalog>12b427191f8443db8e9425c0c7d12320</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>基础复习</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>f588d3e57ddf44faa70cfc5f35b44480</OID>


    <ParentCatalog>12b427191f8443db8e9425c0c7d12320</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>专题复习</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>5f2024120a6d4e1cab81bed99994775a</OID>


    <ParentCatalog>12b427191f8443db8e9425c0c7d12320</ParentCatalog>


    <CatalogOrder>4</CatalogOrder>


    <CatalogName>实战模拟</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>13fb3c35fcb34cca80fe63e5f2f69eac</OID>


    <ParentCatalog>24314e039049494fa16a4efdfe03f766</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>竞赛辅导</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>31c4a2c92e9c4bbea8ea01cfe7494c01</OID>


    <ParentCatalog>24314e039049494fa16a4efdfe03f766</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>竞赛题库</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>b6c44943b87c4bc7ba203f7c23ed2e3c</OID>


    <ParentCatalog>2d8ffc093d404d3dbaa0e03cf93617bb</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>同步课堂</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>12b427191f8443db8e9425c0c7d12320</OID>


    <ParentCatalog>2d8ffc093d404d3dbaa0e03cf93617bb</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>高考专区</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>24314e039049494fa16a4efdfe03f766</OID>


    <ParentCatalog>2d8ffc093d404d3dbaa0e03cf93617bb</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>竞赛专区</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>8fcfc83b325d4498a7b60295ac7dc9ac</OID>


    <ParentCatalog>2d8ffc093d404d3dbaa0e03cf93617bb</ParentCatalog>


    <CatalogOrder>4</CatalogOrder>


    <CatalogName>学习指导</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>73644c6d51bd452dac4274a4c850066c</OID>


    <ParentCatalog>8fcfc83b325d4498a7b60295ac7dc9ac</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>学习心得</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>b1a86b08b8484f4eacd326bdd44d4be2</OID>


    <ParentCatalog>8fcfc83b325d4498a7b60295ac7dc9ac</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>学法指导</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>26447d54472a45519db888aaa1658611</OID>


    <ParentCatalog>8fcfc83b325d4498a7b60295ac7dc9ac</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>专题辅导</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>014a6f3625ce47a2b077eecdd79e1995</OID>


    <ParentCatalog>8fcfc83b325d4498a7b60295ac7dc9ac</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>心理咨询</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>364b53c38c6a4405899360c7be7686c7</OID>


    <ParentCatalog>902c40a1118a45d993753c71f0629e64</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>教案中心</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>000a7b2b8ae84585923515663d9f5eb0</OID>


    <ParentCatalog>902c40a1118a45d993753c71f0629e64</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>课件中心</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>e63f9e48052346d1b5717f49a5ca0dc8</OID>


    <ParentCatalog>902c40a1118a45d993753c71f0629e64</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>试题中心</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>3c6d714891314c6ca42f16337dee523c</OID>


    <ParentCatalog>902c40a1118a45d993753c71f0629e64</ParentCatalog>


    <CatalogOrder>4</CatalogOrder>


    <CatalogName>教法讨论</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>c50abb515d4c49789b1299720e9b3eb0</OID>


    <ParentCatalog>902c40a1118a45d993753c71f0629e64</ParentCatalog>


    <CatalogOrder>5</CatalogOrder>


    <CatalogName>教学论文</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>b312e6ffe19549929d46071bfa13d902</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>1</CatalogOrder>


    <CatalogName>教材内容</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>29cd1b3c709d49ab9fb88199dfc5d7ec</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>2</CatalogOrder>


    <CatalogName>教材全解</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>089f31404aa74b60bcd6e2019766bf00</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>3</CatalogOrder>


    <CatalogName>在线课堂</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>82e4d092dc594f9784bbb52da7e0db91</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>4</CatalogOrder>


    <CatalogName>难点突破</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>0b34aefd506d4df6ad98f8453ede772c</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>5</CatalogOrder>


    <CatalogName>直击高考</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>3cc7026d85364a20a00458a2dc26488b</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>6</CatalogOrder>


    <CatalogName>归纳总结</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>4c6a142e5f4c41a9bb91b5260959cedf</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>8</CatalogOrder>


    <CatalogName>一课一练</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>1a8122631a1541409e7e7fd23483f35f</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>8</CatalogOrder>


    <CatalogName>自主学案</CatalogName>


  </CatalogInfoTb>


  <CatalogInfoTb>


    <OID>ac34e9d3344d42f596bb3a1a918c1acf</OID>


    <ParentCatalog>b6c44943b87c4bc7ba203f7c23ed2e3c</ParentCatalog>


    <CatalogOrder>9</CatalogOrder>


    <CatalogName>在线评测</CatalogName>


  </CatalogInfoTb>


</NewDataSet>

 HTML代码如下(最开始漏掉了一个onexpand事件):




<%...@ Page Language="C#" AutoEventWireup="true" CodeFile="TreeDefault.aspx.cs" Inherits="Test_TreeDefault" %>




<%...@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, XmlDocumentKeyToken=31bf3856ad364e35" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">


    <title></title>




    <script type="text/javascript">...


    var xmlDoc;


    //加载一级目录


    function window_load()




    ...{


        this.loadXML();


        document.getElementById("TreeList").attachEvent("onselectedindexchange",TreeNodeExpand);


        document.getElementById("TreeChapterList").attachEvent("onexpand",TreeNodeExpand);


        //创建根节点


        var rootTreeNode = document.getElementById("TreeList").createTreeNode();


        rootTreeNode.setAttribute("Id","0");


        rootTreeNode.setAttribute("NodeData","0");


        rootTreeNode.setAttribute("Text","树根节点");


        rootTreeNode.setAttribute("NAVIGATEURL","#");


        rootTreeNode.setAttribute("Expandable","always");


        document.getElementById("TreeList").add(rootTreeNode);


        


        var oid,parentCatalog,catalogName,treeNode;


        


        var elements = xmlDoc.selectNodes("//CatalogInfoTb[ParentCatalog='0']");


        for(var n =0; n < elements.length;n++)




        ...{


            childnode   = document.getElementById("TreeList").createTreeNode();  


            oid         = elements.item(n).childNodes[0].childNodes[0].nodeValue;


            catalogName = elements.item(n).childNodes[3].childNodes[0].nodeValue


            childnode.setAttribute("Id",oid);


            childnode.setAttribute("NodeData",oid);


            childnode.setAttribute("Text",catalogName);


            childnode.setAttribute("NAVIGATEURL","#");


            if(xmlDoc.selectSingleNode("//CatalogInfoTb[ParentCatalog='"+ oid +"']") != null)




            ...{


                childnode.setAttribute("Expandable","always");


            }


            rootTreeNode.add(childnode);  


        }    




        document.getElementById("TreeList").expandLevel = 1;


    }


    //载入Xml文档


    function loadXML()




    ...{


        // IE 浏览器


        if (window.ActiveXObject)  




        ...{  


            xmlDoc      = new ActiveXObject("Microsoft.XMLDOM");  


            xmlDoc.async= false;  


            xmlDoc.load("catalogInfo.xml");  


        }


        // Mozilla, Firefox, Opera浏览器


        else if (document.implementation &&document.implementation.createDocument)  




        ...{  


            xmlDoc  =   document.implementation.createDocument("","",null);  


            xmlDoc.load("catalogInfo.xml");  


        }


        else  




        ...{  


            alert("由于你的浏览器不支持Javascript,目录树无法加载...");  


        }


    }


    //加载子节点


    function TreeNodeExpand()




    ...{


        var clickedindex;


        var clickednode;


        var childnode;


        var elements;


        var subElements;


        var childElement;


        


        clickedindex = document.getElementById("TreeList").clickedNodeIndex;            //获得当前被点击的节点索引


        clickednode  = document.getElementById("TreeList").getTreeNode(clickedindex);   //获得被点击的节点


        childnode    = clickednode.getChildren();                                        //获得被点击节点的子节点    


        if(childnode.length > 0) return;                                                //如果有子节点说明被展开过,返回(退出该方法)


        




        /**//*从XML文件中读入子节点数据,构造下一级节点*/


        elements     = xmlDoc.selectNodes("//CatalogInfoTb[ParentCatalog='"+clickednode.getAttribute('Id')+"']");


        for(var n =0; n < elements.length;n++)




        ...{


            childnode   = document.getElementById("TreeList").createTreeNode();  


            oid         = elements.item(n).childNodes[0].childNodes[0].nodeValue;


            catalogName = elements.item(n).childNodes[3].childNodes[0].nodeValue


            childnode.setAttribute("Id",oid);


            childnode.setAttribute("NodeData",oid);


            childnode.setAttribute("Text",catalogName);


            childnode.setAttribute("NAVIGATEURL","#");


            if(xmlDoc.selectSingleNode("//CatalogInfoTb[ParentCatalog='"+ oid +"']") != null)




            ...{


                childnode.setAttribute("Expandable","always");


            }


            clickednode.add(childnode);  


        }        


    }


    </script>


</head>


<body onload="window_load();">


    <form id="form1" runat="server">


    <div>


        <table style="WIDTH: 100%;height:100%" cellspacing="0" cellpadding="0" border="0">


            <tr valign="top" style="height:100%">


                <td style="width: 100%; height: 100%">


                    <iewc:TreeView ID="TreeList" runat="server" BackColor="#EEEEEE" ExpandLevel="4"></iewc:TreeView>


                </td>


            </tr>


        </table>


    </div>


    </form>


</body>


</html>



 

该实例直接采用js读取xml来加载树型列表,其中涉及到的知识点还有xml,xml dom以及微软的树控件

在使用微软的树控件时,由于采用的是递归算法,在树的层次过多的情况下速度会很慢,改用js读取xml文件加载的话,速度上不存在任何问题,我曾经测试过,总共1000多个节点,层次最大达到5层时,能很快的显示。

用这种方法有一点需要注意,如果数据源更新了,它可能不能及时的读取到新数据,因为在上面的代码中,判断了在点击某个节点加载其子节点时,如果该子节点以前加载过,则不会重新加载,也就是


if(childnode.length > 0) return;

 

这句,当然也可以修改一下,改成不管什么时候都去重新读取点击节点的字节点数据。

如果不用读取xml文件的话,也可以改用xmlhttp发送异步命令来获取数据库中的数据。

参考资料:http://msdn2.microsoft.com/zh-CN/library/ms256471.aspx
                    http://www.w3pop.com/tech/school/dom/default.asp
                    微软树控件的treeview.htc,在webctrl_client/1_0目录下

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息