C#递归生成HTML树,C#递归生成xml树
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树的更多相关文章
- A1135 | 红黑树判断:审题、根据“先序遍历”和“BST树”的条件生成后序遍历、递归判断
对A1135这题有心里阴影了,今天终于拿下AC.学习自柳神博客:https://www.liuchuo.net/archives/4099 首先读题很关键: There is a kind of ba ...
- CodeSmith 二、多模板按目录树批量自动生成代码
通过调用指定目录下的所有模板,逐一按照数据表生成独立的代码文件.支持多模板调用.支持所有数据表生成或批量指定多个生成.支持自动的文件目录结构.支持代码文件格式化命名等. 背景:最近一个新项目一高兴选了 ...
- UVa 297 Quadtrees(树的递归)
Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序 ...
- ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)
问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...
- C# 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解
笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...
- 树、递归、广度优先搜索(BFS)————二叉树的最小深度
解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加1 要确定的是,一定要保证初始输入的节点是有子节点的.因为可能出现只有单子树的情况,所以要先确认这种情况. 具体过程: 1.分析初始 ...
- UVa 839 -- Not so Mobile(树的递归输入)
UVa 839 Not so Mobile(树的递归输入) 判断一个树状天平是否平衡,每个测试样例每行4个数 wl,dl,wr,dr,当wl*dl=wr*dr时,视为这个天平平衡,当wl或wr等于0是 ...
- SQL Server中CTE的另一种递归方式-从底层向上递归
SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
随机推荐
- 对C语言指针的理解
一个小程序引发对于C语言指针的思考: #include <bits/stdc++.h> using namespace std; void my_swap (int* a,int* b) ...
- 本博客不再更新和维护,后续文章会在掘金和GitHub发布,感兴趣的小伙伴可以掘金搜索王振宇,谢谢
本博客不再更新和维护,后续文章会在掘金和GitHub发布,感兴趣的小伙伴可以掘金搜索王振宇,谢谢
- JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别
首先需要知道clientX,clientY,screenX,screenY,offsetX,offsetY 是鼠标事件对象下的几个属性. 之前也一直对这些属性搞的稀里糊涂,看文档上说的也是不太理解,反 ...
- ORACLE数据库_迁移(新机器,新存储)
迁移: (10g 64老机器,老存储) ------>(11g 64新机器,新存储)注意要点:新老服务的时间,字符集,sid升级顺序:10.2.0.1------>10.2.0.4或10. ...
- java项目---遍历系统文件(1星)
package Demo; import java.io.*; public class TraversalContent { public static void main(String []arg ...
- ionic上拉加载组件 ion-infinite-scroll自动调用多次的问题
参考文章地址:http://www.cnblogs.com/luleixia/p/6402418.html ionic 一个上拉刷新的组件 ion-infinite-scroll,如果页面未填充满页面 ...
- python中的time模块和datetime模块
>>> import time>>> time.time()1511330865.656656>>> time.localtime(time.ti ...
- sql注入-推断是否存在SQL注入-and大法和or大法
来自:https://www.cnblogs.com/ichunqiu/p/5749347.html 页面不返回任何错误信息,我们就可以借助本方法来推断了,首先我们在参数后面加上 and 1=1和an ...
- Python基础测试题
1,执行Python脚本的两种方式 答:一种是 交互式,命令行shell启动Python,输入相应代码得出结果,无保存,另一种是 脚本式,例如:python 脚本文件.py,脚本文件一直存在,可编辑, ...
- edgedb 集成timescaledb
timescaledb 是一个强大的pg 扩展,可以让我们的pg 数据库支持时序数据库的能力,以下测试下与edgedb 集成 预备 因为edgedb 当前是基于pg11 开发的,所以需要使用pg11 ...