xml配置文件如下(URL地址并未全部填写,主要用于测试):
<?xml version="1.0" encoding="utf-8" ?>
<menu>
 
  <住房信息 >
    <住房管理>~/Web/Default.aspx</住房管理>
    <职工住房信息 >~/Web/Default2.aspx</职工住房信息 >
    <职工货币化管理 > </职工货币化管理 >
    <职工货币化查看 >  </职工货币化查看>
  </住房信息>
 
  <家具数据管理>
    <家具数据维护></家具数据维护>
  </家具数据管理>
   
  <系统文章管理>
    <系统文章维护>  </系统文章维护>
  </系统文章管理>
  <教职工信息>
    <教职工信息维护></教职工信息维护>
  </教职工信息>
 
  <系统操作>
    <退出系统></退出系统>
  </系统操作>
 
</menu>
页面绑定数据代码:
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="XDS" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" NodeIndent="8">
   <ParentNodeStyle BackColor="White" ChildNodesPadding="5px" Font-Bold="False" Font-Italic="False" />
   <RootNodeStyle Font-Bold="True" ForeColor="#000040" Font-Size="13pt" />
   <NodeStyle Font-Bold="False" />
   <LeafNodeStyle Font-Bold="False" Font-Size="11pt" ForeColor="Teal" />
</asp:TreeView>
<asp:XmlDataSource ID="XDS" runat="server" DataFile="~/Web/Master/gp_menu.xml" XPath="/menu/*">
</asp:XmlDataSource>
后台的单击代码:
   protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        XmlDocument XDoc = new XmlDocument();
        XDoc.Load(Server.MapPath("~/Web/Master/gp_menu.xml"));  //获得menu配置文件
        XmlNodeList XNodeList = XDoc.DocumentElement.ChildNodes; //获得该文件跟节点的所有子节点
        List<string> list = new List<string>();         //定义一个list用来保存父节点
        XmlNode XNode;
        int i;                                   //简单计数功能                       
        for (i = 0; i < XNodeList.Count; i++ )    //遍历所有根结点的子节点也就是菜单中的父节点
        {
            XNode = XNodeList.Item(i);
            list.Add(XNode.Name);                    //将节点的名字加入到list中
        }
 
       
        TreeNode sltNode = TreeView1.SelectedNode;
        bool isParent = false;
        //查看选择节点是否为父节点
        for (i = 0; i < list.Count; i++ )
        {
            if (list[i] == sltNode.Text)
            {
                sltNode.ToggleExpandState();            //选择节点为父节点时,使该节点在展开和折叠状态转换
                isParent = true;                   //标记该节点为父节点
                sltNode.Selected = false;              //如果不设置为false 当连续点击同一个父节点时不会触发该函数
                break;
            }
        }
        //选择结点为子节点
       
        if (false == isParent)
        {
            string dpath = "";
            string url = "";
            dpath = sltNode.DataPath;         //获得选择结点的路径
                                       // eg. /*[position()=1]/*[position()=2]/*[position()=1] 选择了第二个父节点的第一个子节点
            dpath = dpath.Substring(30, 1); //获得 第二层路径的深度值(从1开始计数的)
            XNode = XNodeList.Item(Convert.ToInt32(dpath) - 1);
            url = XNode[sltNode.Text].InnerText;    //获得选择节点的值(即页面地址)
            Response.Redirect(url);                //跳转页面
        } 
       
    }