C#递归生成HTML树

public StringBuilder str = new StringBuilder();   //定义一个字符串

private void get_navigation_childs(List<TableClass> oldData, string parent_id)
{
List<TableClass> dr = oldData.Where(x => x.PCode == parent_id).OrderBy(x => x.Kid).ToList(); //Code代表节点信息,PCode代表父级节点信息,PMMC代表节点名称
bool isWrite = false; //是否输出开始标签
for (int i = ; i < dr.Count(); i++)
{
//如果是顶级导航
if (parent_id == "")
{
str.Append("<ul>");
str.Append("<li class='parent_li' >"); str.Append("<span title='Collapse this branch'>");
str.Append("<i class='icon-folder-open'></i>" + dr[i].PMMC + "</span> ");
//str.Append("<a href='RoleListEdit.aspx?id=" + dr[i].ID + "&type=Edit'>编辑</a> \n");
//str.Append("<a data='RoleListList.aspx?id=" + dr[i].ID + "&type=Del' onclick='del(this)' >删除</a> \n");
//调用自身迭代
this.get_navigation_childs(oldData, dr[i].Code);
str.Append("</ul>"); }
else //下级导航
{
if (!isWrite)
{
isWrite = true;
str.Append("<ul>");
}
str.Append("<li>");
str.Append(" <span><i class='icon-leaf'></i>" + dr[i].PMMC + "</span>");
//str.Append("<a href='RoleListEdit.aspx?id=" + dr[i].ID + "&type=Edit'>编辑</a> \n");
//str.Append("<a data='RoleListList.aspx?id=" + dr[i].ID + "&type=Del' onclick='del(this)' >删除</a> \n");
//调用自身迭代
this.get_navigation_childs(oldData, dr[i].Code);
str.Append("</li>");
if (i == (dr.Count() - ))
{
str.Append("</ul>");
}
}
}
}

C#递归生成XML树

public void TestBuild(string Path)
{
DataTable dt = InitTable();

XmlElement xe = xd.CreateElement("Datas");
xd.AppendChild(xe);

//执行递归,添加XML节点
BTest(dt, xe);
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + xd.OuterXml.ToString().Replace("/>", "></Item>"));
doc.Save(Path);
}

        /// <summary>
/// 递归添加XML节点
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="node">当前节点</param>
public void BTest(DataTable dt, XmlElement node)
{
XmlElement tmp; var list = from r in dt.AsEnumerable()
select r;
if (node != null && node.Attributes["Code"] != null)
{
list = from r in dt.AsEnumerable()
where r["PCode"].ToString().Equals(node.Attributes["Code"].Value)
select r;
} foreach (DataRow row in list)
{
if (!usedElement.Contains(row["Code"].ToString()))
{
usedElement.Add(row["Code"].ToString());
tmp = xd.CreateElement("Item"); var a = tmp.NodeType; tmp.SetAttribute("Code", row["Code"].ToString());
tmp.SetAttribute("PCode", row["PCode"].ToString());
//tmp.InnerText = row["PMMC"].ToString(); node.AppendChild(tmp); BTest(dt, tmp);
}
}
}

C#递归生成HTML树,C#递归生成xml树的更多相关文章

  1. A1135 | 红黑树判断:审题、根据“先序遍历”和“BST树”的条件生成后序遍历、递归判断

    对A1135这题有心里阴影了,今天终于拿下AC.学习自柳神博客:https://www.liuchuo.net/archives/4099 首先读题很关键: There is a kind of ba ...

  2. CodeSmith 二、多模板按目录树批量自动生成代码

    通过调用指定目录下的所有模板,逐一按照数据表生成独立的代码文件.支持多模板调用.支持所有数据表生成或批量指定多个生成.支持自动的文件目录结构.支持代码文件格式化命名等. 背景:最近一个新项目一高兴选了 ...

  3. UVa 297 Quadtrees(树的递归)

    Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序 ...

  4. ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)

    问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...

  5. C# 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解

    笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...

  6. 树、递归、广度优先搜索(BFS)————二叉树的最小深度

    解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加1 要确定的是,一定要保证初始输入的节点是有子节点的.因为可能出现只有单子树的情况,所以要先确认这种情况. 具体过程: 1.分析初始 ...

  7. UVa 839 -- Not so Mobile(树的递归输入)

    UVa 839 Not so Mobile(树的递归输入) 判断一个树状天平是否平衡,每个测试样例每行4个数 wl,dl,wr,dr,当wl*dl=wr*dr时,视为这个天平平衡,当wl或wr等于0是 ...

  8. SQL Server中CTE的另一种递归方式-从底层向上递归

        SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...

  9. hibernate 联合主键生成机制(组合主键XML配置方式)

    hibernate 联合主键生成机制(组合主键XML配置方式)   如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...

随机推荐

  1. mysql数据库简单一些简单操作和总结

    1. mysql 数据库操作方法: 进入数据库 mysql -uroot -p 退出 quite exit 默认引擎 innodb 查看版本 select verison(); 查看时间 select ...

  2. JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别

    首先需要知道clientX,clientY,screenX,screenY,offsetX,offsetY 是鼠标事件对象下的几个属性. 之前也一直对这些属性搞的稀里糊涂,看文档上说的也是不太理解,反 ...

  3. Jdbc来操作事物 完成模拟银行的转账业务

    创建JDBC工具类 package cn.aa4_2.JDBCUtils; import java.io.FileReader; import java.io.IOException; import ...

  4. C++实验七

    #include <iostream> using namespace ::std; int main() { ios_base::fmtflags original_flags = co ...

  5. 关于我与小组成员逐步升级C代码时的一些感想【第二次作业】

    #include<stdio.h> #include<stdlib.h> #include <time.h> int main(){ srand(time(NULL ...

  6. SQL Sever 2012版本数据库的完全卸载

    首先再使用的过程中,遇到当前版本和项目数据库服务器的SQL Sever 版本不一致,导致无法正常的数据导入. 所以需要我们将本地的SQL Sever 数据库,进行一个完整的卸载,进而去安装和项目一致的 ...

  7. Ubuntu 下超简单的安装指定版本的nodejs

    第一步 指定版本源 执行 curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - setup_5.x 需要安装的版本号,替换数字就 ...

  8. 名字top500字典 各种格式及python脚本

    原文件名字top500 链接: https://pan.baidu.com/s/1cv0jPYb1-EBceoZz3QNvgg 密码: bat5 中文名字 链接: https://pan.baidu. ...

  9. response响应

    郭晨 软件151 1531610114 response1.response常用APIsetStatus:设置响应行当中的状态码setHeader:设置响应头信息getOutputStream:获得字 ...

  10. 使用Visual Studio 2017 C++17模块(module)特性

    环境: win7_x64旗舰版.VS2017企业版 一.安装VS2017 1.1 安装VS2017时,必须要勾选“使用C++的modules开发”选项 1.2 安装成功后,会在VS安装目录Micros ...