浅谈C#对XML文件的遍历

来源 :理论纵横 | 被引量 : 0次 | 上传用户:liu6541
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:XML作为Web当前主流的数据形式,在Web服务等方面有着广泛的使用,本文分析利用DOM实现对XML文件的前序遍历过程,并通过C#实现对DOM树的遍历,从而获得遍历任意XML文件的可行性方法。
  关键词:XML;DOM;C#;遍历
  
  一、问题的提出
  XML(Extensible Markup Language)即可扩展标记语言,是一种您可以用来创建自己标记的标记语言。目前XML语言已成为Web应用中数据表示和数据交换的标准,随着Internet的快速发展,Web服务等应用的广泛使用,XML类型的数据成为当前主流的数据形式。因此XML数据的管理技术尤其是XML数据查询技术成为当前的研究热点,那么怎样才能实现对XML文件中的数据进行查询和遍历呢?下面就以一个给定的XML文件为参照,来研究用C#如何实现对其遍历。
  二、利用DOM实现对XML文件的遍历
  DOM(Document Object Model)文档对象模型定义了文档的逻辑结构和访问操纵文档的方法,它为XML和HTML文档提供了应用程序接口(API)。DOM提供的对象和方法可以和任何编程语言一起使用,利用DOM,我们就可以实现对XML文档进行遍历。
  MSXML(Microsoft XML Parser)解析器的DOM提供基本的接口以及扩展的编程接口,基本的接口(DOMDocument和IXMLDOMNode)可以载入和创建一个文档。当MSXML解析器载入文档时,解析器读入这个文档并且创建一个描述XML文档中各组成部分的DOM树形结构。
  如下面的XML文件(example.xml):<?xml version="1.0" encoding="GB2312"?>
  
  John Smith
  

  10,willinton street,boston
  

  2000
  

  转换成DOM树形结构图如下:
  要对以上的DOM树进行遍历,我们可以利用树的最重要的两种遍历方式即前序遍历、后序遍历来进行。根据数据在XML文档中的组织形式,实际中我们主要采取前序遍历的方式来对DOM树进行遍历。对上述的DOM树进行前序遍历是一个递归的过程:首先访问树的根节点,然后先序遍歷根节点的第一棵子树,再依次先序遍历根节点的其它各棵子树。我们可以这样理解:遍历从父节点开始,到子节点,再到子节点的子节点,尽可能的深入,直到叶子节点;然后遍历过程向上回退一层,并进入下一个子节点,再到该子节点的子节点,……,依此类推,直到访问完所有结点为止。对上述的DOM树进行先序遍历,访问的路径为:EmployeeData——Employee——EmployeeName——John Smith——Address——ResAddress——10,willington street,boston——Salary——2000。显然,当我们需要在DOM树中查找某个特定类型的信息或数据时,遍历整个XML文档是很有帮助的。
  三、在ASP.NET平台上用C#实现对DOM树的遍历
  NET Framework在它的命名空间System.Xml 中提供了一种可以很方便的操作xml的类XmlDocument,它其实就是一个简单的树,该类包含了Load、LoadXml以及Save等重要方法。其中Load方法可以从一个字符串指定的xml文件或是一个流对象、一个TextReader对象或一个XmlReader对象导入xml数据。
  我们可以通过下面的语句来加载XML文档(以下代码在VS2005中实现):protected void Page_Load(object sender, EventArgs e)
  {XmlDocument xmldoc=new XmlDocument();xmldoc.Load(Server.MapPath("example.xml"));XmlElement root=xmldoc.DocumentElement;traverse(root);
  }其中traverse方法是用来实现先序遍历DOM树的,我们可以用下面代码实现:protected void traverse(XmlNode tree){ if(tree.HasChildNodes) {display(tree);tree=tree.FirstChild;while(tree!=null && tree.HasChildNodes){ traverse(tree);tree=tree.NextSibling;}
  }
  if (tree !=null && !tree.HasChildNodes)
  { display(tree); } }protected void display(XmlNode node)//显示节点元素值或属性值{ if(node.HasChildNodes)
  { Response.Write("Name="+node.Name+"Type="+node.NodeType.ToString()+ "
");
  if(node.NodeType==XmlNodeType.Element){ foreach(XmlAttribute x in node.Attributes){ Response.Write("Name="+x.Name+"Type="+ x.NodeType.ToString()+"value=" +x.Value+"
");} }
  }
  else { Response.Write("Name="+node.Name+"Type="+node.NodeType.ToString()+"value="+node.Value+"
"); }
  }
  四、结束语
  上面我们是针对一个特定的XML文件来进行遍历的,我们可以考虑将此遍历算法用于任意XML文档,实验证明,是切实有效可行的。众所周知,用XML可以将数据在不兼容的系统之间进行交换。在现实中,计算机系统和数据库所包含的数据格式不兼容。对于开发人员来说,最浪费时间的就是在Internet上的这些系统之间进行数据交换。将数据转换成XML可以大大地降低这种复杂性,所创建的数据可以被多种不同类型的应用程序阅读。我们有理由充分相信,XML在未来的Web开发中将成为数据操作和数据传输的最常用工具。
  
  参考文献:
  [1](美)Dinar Dalvi,Joe Gray等著.英宇,林琪等译.《.NET XML高级编程》北京:清华大学出版社,2002.6。
  [2](美)G.Andrew Duthie ,《Microsoft ASP.NET程序设计》,北京:清华大学出版社,2002。
  [3]沉舟.Microsoft.NET编程语言C#[M].北京:希望电子出版社,2006。
其他文献
摘要:公民参与是现代政府绩效评估不可或缺的重要环节,促进公民参与在政府绩效评估中的发展有其必要性。本文从我国政府绩效评估中的公民参与的现状出发,针对现实中影响公民参与的主要障碍,提出了扩大我国公民参与绩效评估的建议。  关键词:公民参与;政府绩效    20世纪80年代以来,以英美为首的发达国家为解决政府面临的管理危机和公众信任危机,兴起了“新公共管理运动”,进而提出在政府部门实施绩效评估。随后这
期刊
摘 要:我国股票市场经过尽二十余年的发展取得了很大的成果,但是与发达国家相比,仍不十分成熟,其中突出表现为股票价格的异常波动现象明显,新兴市场中投资者的非理性程度远远高于发达国家中的投资者的非理性程度。(如我们08年股市跌幅达70%,成熟市场在40%左右)投资者心理在近年来我国股市剧烈波动的过程中起着不可忽视的作用。本文意在介绍中国广大股民、特别是散户者的市场参与心态,使投资者能从客观角度审视现在
期刊
摘要:明清两代的统治者为了巩固边疆、加强管理,在民族教育上对云南地区实施了推行儒学,兴办官学等一系列有力的措施,客观上促进了儒学文化的传播,培养了大批少数民族人才,有力地巩固了两朝的封建统治。当然,明清对云南地区的民族教育政策并不是雷同化的,而是具有鲜明的时代性和阶段继承性。  关键词:明清;云南地区;民族;教育    民族教育是指中央王朝在民族地区所实施的以官学为主体的学校教育,其初兴始于西汉,
期刊
摘要:本文以对电影《梅兰芳》的剧作分析为例,介绍暨南大学导演专业编剧课程的教学模式。此模式在培养学生的艺术个性之余,强调编剧的工作必须服从于影视制作的全局,适应市场化运作,了解投资、发行对剧作的限制。因此编剧必须寻找艺术与商业之间的平衡点。  关键词:编剧;教学模式;《梅兰芳》    2006年,暨南大学艺术学院增设导演本科专业,并于次年开始招生。本专业虽名“导演”,但强调的是培养编导合一的原创型
期刊
摘要:《诗经》国风收集了周代各诸侯国民歌,民歌真实反映当时社会习俗。《国风》婚恋诗表现各地不同婚姻礼俗,也反映出周朝礼仪教化作用在各诸侯国影响范围和程度并不一致,表现出地域的差异性。  关键词:诗经;国风;婚俗    《诗经》是我国最早的诗歌总集,收集了西周初年至春秋中叶大约500年的诗歌,共305首,分为风、雅、颂三部分。十五《国风》采集自各地民歌,其诗歌来源为各地献诗及采诗官去往各地采集。“劳
期刊
摘要:个性化绘画语言是在艺术创造过程中产生和定型的。艺术家们已经越来越意识到,开发挖掘各自特有的个性化绘画语言,是艺术作品充满感染力、表现力、生命力的根基,也是激发和还原艺术家创造思维的源泉。对个性化绘画语言的追求,已成为艺术家绘画创作的灵魂所在。  关键词:绘画语言;个性绘画语言;创作个性    一般认为,最能代表人类创造性领域有两个,那就是艺术和科学。科学围着客观事实转,强调“非主观化”,而绘
期刊
摘要:卢梭的《论人与人之间不平等的起因和基础》一书探讨了一个非常原始而古老的问题:人与人之间是否是平等的?是什么造成了人与人之间的不平等?在本书中,卢梭通过对自然状态的假设,描绘了野蛮人在原始状态中的幸福生活,并指出私有财产出现之后,人与人之间不平等经历的三个阶段。本文主要介绍卢梭《论人与人之间不平等的起因和基础》一书的政治思想,并对其进行简要评述。  关键词:自然状态;社会状态;平等;不平等  
期刊
摘要:抗日战争全面爆发初期我军就取得了“八一四”空战大捷,防空部队在南京防空战中有效地阻击了日军侵略步伐,粉碎了日军“三个月灭亡中国”的战略计划,在抗战中有力地配合其他兵种和盟国空军奋勇抗敌,为抗日战争最终胜利作出了重要贡献。随着我国史学的发展和对民国史研究的深入,涉及南京国民政府对日防空的研究文章和著作大量涌现出来,文章通过对这一问题研究状况进行梳理总结,以利于我们全面客观公正地认识和研究抗日战
期刊
摘要:科学社会主义,是马克思批判地继承19世纪法国、英国空想社会主义的优秀成果而创立的。马克思对空想社会主义予以革命改造和科学论证,把它置于现实的基础上,从而发生质的飞跃,实现了社会主义从空想到科学的伟大变革。  关键词:马克思;空想社会主义;科学社会主义    科学社会主义,是马克思批判地继承19世纪法国、英国空想社会主义的优秀成果而创立的。欧洲三大空想家的学说,包括对资本主义制度的尖锐批判和对
期刊
摘要:“藻”在中国古代文学中是一个比较特殊的概念,它首先是一种极其重要的植物意象,常常与蘋并举,作为洁净的品德的象征。其次,“鱼在藻”也成为一个固定的文学意象;并且在器物、绘画上,“鱼藻纹”是一个常见的审美形象。更为特殊的是,藻还籍由古代建筑的藻饰(藻井)这一介质,进入文学批评中被广泛运用。  关键词:藻;洁净;鱼在藻;藻饰    注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
期刊