在.Net framework下遍历XML文挡树的两种算法
在阅读ASP.NET_XML深入编程技术 (PDF格式)一书的时候,发现遍历树的两种算法:深度优先和广度优先遍历文挡树,前一种需要使用递归,后者则不需要,本人大学时期数据结构学的不好,每每涉及到树,总喜欢用递归,希望以后能根据需要选用一种,不过没有时间再系统地学习数据结构了,那就平时多学多记吧!
另外这个例子不错,还可以学到.net的XML DOM的一些操作方法.
2 /// 深度优先遍历文挡树(递归方法)
3 /// </summary>
4 /// <param name="currentNode">当前节点</param>
5 public void DOMDepthFirst(XmlNode currentNode)
6 {
7 XmlNode node = currentNode.FirstChild ;
8 while ( node != null )
9 {
10 DOMDepthFirst( node ) ;
11 node = node.NextSibling ;
12 }
13
14 //do something else with currentNode herer
15 }
2 /// 广度优先遍历文挡树(非递归)
3 /// </summary>
4 /// <param name="root">遍历的入口点,如果需要遍历整个文挡则是XmlDocument对象</param>
5 public void DOMBreadthFirst(XmlNode root)
6 {
7 Queue queue = new Queue() ;
8 queue.Enqueue(root) ;
9 XmlNode currentNode = null ;
10 try
11 {
12 while (true)
13 {
14 //如果queue为空,则抛错,跳出try section,这里是while循环的退出条件
15 currentNode = (XmlNode)queue.Dequeue() ;
16
17 if (currentNode.HasChildNodes)
18 {
19 foreach (XmlNode child in currentNode.ChildNodes)
20 {
21 queue.Enqueue(child) ;
22 }
23 }
24 }
25 }
26 catch(System.InvalidOperationException ex)
27 {
28 //throw ex ;
29 }
30 }
31
32
使用方法:
XmlDocument doc = new XmlDocument() ;
doc.Load("test.xml") ;
DOMDepthFirst(doc) ;
DOMBreadthFirst(doc) ;
转载于:https://www.cnblogs.com/kwklover/archive/2006/04/08/369888.html
在.Net framework下遍历XML文挡树的两种算法相关推荐
- 遍历XML文挡树的两种算法
深度优先遍历文挡树(递归方法): 1/** <summary> 2 /// 深度优先遍历文挡树(递归方法) 3 /// </summary> 4 /// < ...
- 用JavaScript语言通过DOM遍历XML文档
实验结果要求如下: 解决步骤: 1. 首先是布局,左边用表格比较方便,右边是个div块. 2. 嵌入JavaScript脚本,由易到难,写定义全部显示的功能函数.显示姓名功能函数,显示属性功能函数 ...
- php循环获取xml节点,PHP_PHP遍历XML文档所有节点的方法,本文实例讲述了PHP遍历XML文档 - phpStudy...
PHP遍历XML文档所有节点的方法 本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: J J J Manager Nati ...
- XML文档定义有几种形式?解析XML文档有哪几种方式?
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上 ...
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束.其本质区别在于Schema本身也是一个XML文 ...
- bootstrap搜索框:click下拉展开改hover展开(两种代码)
bootstrap搜索框:click下拉展开改hover展开(两种代码) 问题: 实现顶部导航的鼠标悬停下拉展开的效果: 实现的滚不导航区域:搜索框组件之点击下拉展开 变更为 鼠标悬停展开下拉选项条件 ...
- PDF文档压缩的两种简单方法
我们无论在办公中还是在上网查找资料时,经常会遇到PDF文档.工作中,传送邮件时需要PDF文档格式的,但是PDF文档太大也是个棘手的问题.大多数公司邮箱上传附件大小是限制在5M以下的,否则就会出现接收失 ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归.栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作. 深度优先遍 ...
- 计算机音乐播放器设置,Win7系统下设置默认音乐播放器的两种方法
可能很多新手用户不知道Win7系统下怎么设置默认音乐播放器?我们习惯将某一程序设置为默认打开方式,音乐播放器也可以这样子的.一些用户想把酷狗播放器.或者qq音乐设置为默认音乐播放器,只要打开音乐文件, ...
最新文章
- linux搭建--ubuntu下安装libvirt注意事项(二)
- Java实现HashTable的基本操作
- 攻防世界-web-fakebook-从0到1的解题历程writeup
- android 自定义 进度条 旋转,Android_Android ProgressBar进度条使用详解,ProgressBar进度条,分为旋转进 - phpStudy...
- Qt中标准对话框实例,QObject::tr()的作用
- 点击打开自己博客地址通过默认浏览器
- kubeadm安装k8s 1.13版本
- 【剑指offer】面试题24:反转链表(Java 实现)
- 竟然被awk生成的随机数给整蒙了,也谈随机数生成种子
- 使用swoole作为MQTT客户端并接收实现即时消息推送
- Java StringBuffer 用法
- SPSS心理学量表总体或分维度用总分还是均分表示?【SPSS 061期】
- js获取当前URL、域名、端口号等
- python创建一个列表、依次存放每个月对应的天数_python计算天数
- 什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
- 看透SpringMVC源码-网站架构演变1-3
- 拼多多 标题 html,拼多多的创意图和创意标题怎么测试?为什么要测试?怎样测试呢?...
- Pytorch中torch.isfinite()、torch.isinf()、torch.isnan()函数的使用
- 纵观 Excel 演化史,开发者如何通过“表格技术”提升企业生产力
- 小米笔记本装linux教程视频教程,重新安装系统,小编教你小米笔记本怎么重装win10系统...
热门文章
- c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放
- Premiere Pro CC2017教程(三)
- 实时可视化 Debug:VS Code 开源新工具,一键解析代码结构
- 那些 别人家的孩子 ,后来都怎么样了 ?
- Github 热榜项目:如何让你的终端酷炫到没朋友
- 通讯编码器测试软件,西门子S7-200 SMART通过modbusRTU与绝对值编码器通信
- C语言僵尸进程,C/C++网络编程8——多进程服务器端之销毁僵尸进程
- php网页论坛制作教程,PHP开发 小型论坛教程之登录HTML页面
- win10浏览器加载很慢_谷歌彻底爆发了!Chrome浏览器正式更新,8GB老电脑满血复活...
- 分支限界发:Dijkstra算法