论文部分内容阅读
摘 要: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。
关键词: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"?>
转换成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。