2022年在VisualC#中使用XML指南之读取XML推荐 .pdf
《2022年在VisualC#中使用XML指南之读取XML推荐 .pdf》由会员分享,可在线阅读,更多相关《2022年在VisualC#中使用XML指南之读取XML推荐 .pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、欢迎访问中文C# 技术站 ! 返回首页Free Blog with domains!Domains as low as $1.19/ea, free website and moreGlobe7 - Free Download!Phone + Chat + Radio + TV Free! Download Now!Globe7 - Free !Call Free, Chat Free and Watch TV for Free!返回本类 在 Visual C# 中使用 XML指南之读取 XML 在 Visual C# 中使用 XML指南之读取 XML 2005-02-26 中文 C#技术站对
2、于 XML ,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的 Web 开发中 XML 一定会大放异彩,XML 是可扩展标记语言,使用它企业可以制定一套自己的数据格式, 数据按照这种格式在网络中传输然后再通过XSLT 将数据转换成用户期望的样子表示出来,这样便轻易的解决了数据格式不兼容的问题。用于Internet 的数据传输,我想,这是XML 对于我们这些程序员最诱人的地方!我们今天的主题不是论述XML 的好处,而是讨论在C#中如何使用XML 。下面我们来了解一下使用程序访问XML 的一些基础理论知识。访问的两种模型:在程序中访问进而操作XML 文件一般有两种模型,分别是使用
3、DOM(文档对象模型)和流模型,使用DOM 的好处在于它允许编辑和更新XML 文档,可以随机访问文档中的数据,可以使用XPath 查询,但是, DOM 的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML 文件的访问采用的是流的概念,也就是说, 任何时候在内存中只有当前节点,但它也有它的不足,它是只读的, 仅向前的, 不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补嘛,呵呵, 这是题外话了! 我们今天主要讨论XML 的读取,那我们就详细讨论一下流模型吧!流模型中的变体:流模型每次迭代XM
4、L 文档中的一个节点,适合于处理较大的文档,所耗内存空间小。流模型中有两种变体“ 推 ” 模型和 “ 拉” 模型。推模型也就是常说的SAX, SAX 是一种靠事件驱动的模型,也就是说:它每发现一个节点就用推模型引发一个事件,而我们必须编写这些事件的处理程序,这样的做法非常的不灵活,也很麻烦。.NET 中使用的是基于“ 拉” 模型的实现方案,“ 拉” 模型在遍历文档时会把感兴趣的文档名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 29 页 - - - - - - - - -
5、 部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,在性能上“ 拉” 模型可以选择性的处理节点,而SAX 每发现一个节点都会通知客户机,从而,使用“ 拉 ” 模型可以提高Application的整体效率。在.NET 中 “ 拉” 模型是作为XmlReader 类实现的,下面看一下该类的继承结构:我们今天来讲一下该体系结构中的XmlTextReader 类,该类提供对Xml 文件进行读取的功能,它可以验证文档是否格式良好,如果不是格式良好的Xml 文档,该类在读取过程中将会抛出XmlException异常,可使用该类提供的一些方法对文档节点进行读取,筛选等操
6、作以及得到节点的名称和值,请牢记:XmlTextReader 是基于流模型的实现,打个不恰当的比喻, XML 文件就好象水源,闸一开水就流出,流过了就流过了不会也不可以往回流。内存中任何时候只有当前节点,你可以使用 XmlTextReader 类的 Read()方法读取下一个节点。好了,说了这么多来看一个例子,编程要注重实际对吧。看代码前先看下运行效果吧!Example1 按纽遍历文档读取数据,Example2,Example3 按纽得到节点类型,Example4过滤文档只获得数据内容,Example5 得到属性节点, Example6 按纽得到命名空间, Example7显示整个 XML 文
7、档,为此,我专门写一个类来封装以上功能,该类代码如下:/- /XmlReader 类用于 Xml 文件的一般读取操作,以下对这个类做简单介绍:/ /Attributes( 属性 ): /listBox: 设置该属性主要为了得到客户端控件以便于显示所读到的文件的内容(这里是 ListBox 控件 ) /xmlPath: 设置该属性为了得到一个确定的Xml 文件的绝对路径/ /Basilic Using( 重要的引用 ): /System.Xml: 该命名空间中封装有对Xml 进行操作的常用类,本类中使用了其中的 XmlTextReader 类/XmlTextReader: 该类提供对Xml 文件
8、进行读取的功能,它可以验证文档是否格式良 好 , 如 果 不 是 格 式/ 良 好 的Xml文 档 , 该 类 在 读 取 过 程 中 将 会 抛 出XmlException 异常,可使用该类提供的/ 一些方法对文档节点进行读取,筛选等操作以及得到节点的名称和值/ /bool XmlTextReader.Read(): 读取流中下一个节点,当读完最后一个节点再次调用该方法该方法返回false /XmlNodeType XmlTextReader.NodeType: 该属性返回当前节点的类型/ XmlNodeType.Element 元素节点/ XmlNodeType.EndElement 结尾
9、元素节点/ XmlNodeType.XmlDeclaration 文档的第一个节点名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 29 页 - - - - - - - - - / XmlNodeType.Text 文本节点/bool XmlTextReader.HasAttributes: 当前节点有没有属性,返回true 或 false /string XmlTextReader.Name: 返回当前节点的名称/string XmlTextReader.V alue:
10、返回当前节点的值/string XmlTextReader.LocalName: 返回当前节点的本地名称/string XmlTextReader.NamespaceURI: 返回当前节点的命名空间URI /string XmlTextReader.Prefix: 返回当前节点的前缀/bool XmlTextReader.MoveToNextAttribute(): 移动到当前节点的下一个属性/- namespace XMLReading using System; using System.Xml; using System.Windows.Forms; using System.Compo
11、nentModel; / summary / Xml 文件读取器/ /summarypublic class XmlReader : IDisposable private string _xmlPath; private const string _errMsg = Error Occurred While Reading ;private ListBox _listBox; private XmlTextReader xmlTxtRd; #region XmlReader 的构造器public XmlReader() this._xmlPath = string.Empty; this._
12、listBox = null; this.xmlTxtRd = null; / summary/ 构造器/ /summary/ param name=_xmlPathxml 文件绝对路径/param/ param name=_listBox 列表框用于显示xml/parampublic XmlReader(string _xmlPath, ListBox _listBox) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 29 页 - - - - - - - - - th
13、is._xmlPath = _xmlPath; this._listBox = _listBox; this.xmlTxtRd = null; #endregion #region XmlReader 的资源释放方法/ summary/ 清理该对象所有正在使用的资源/ /summarypublic void Dispose() this.Dispose(true); GC.SuppressFinalize(this); / summary/ 释放该对象的实例变量/ /summary/ param name=disposing /paramprotected virtual void Dispo
14、se(bool disposing) if (!disposing) return; if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); this.xmlTxtRd = null; if (this._xmlPath != null) this._xmlPath = null; #endregion#region XmlReader 的属性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 29 页 - - - - - - -
15、- - / summary/ 获取或设置列表框用于显示xml / /summarypublic ListBox listBox get return this._listBox; set this._listBox = value; / summary/ 获取或设置xml 文件的绝对路径/ /summarypublic string xmlPath get return this._xmlPath; set this._xmlPath = value; #endregion / summary/ 遍历 Xml 文件/ /summarypublic void EachXml() this._li
16、stBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 29 页 - - - - - - - - - while(xmlTxtRd.Read() this._listBox.Items.Add(this.xmlTxtRd.Value); catch(XmlException exp) throw new XmlException(_
17、errMsg + this._xmlPath + exp.ToString(); finally if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); / summary/ 读取 Xml 文件的节点类型/ /summarypublic void ReadXmlByNodeType() this._listBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); try while(xmlTxtRd.Read() this._listBox.Items.Add(this.
18、xmlTxtRd.NodeType.ToString(); catch(XmlException exp) throw new XmlException(_errMsg + this._xmlPath + exp.ToString(); finally if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 29 页 - - - - - - - - - / summary/ 根据节
19、点类型过滤Xml 文档/ /summary/ param name=xmlNType XmlNodeType 节点类型的数组/parampublic void FilterByNodeType(XmlNodeType xmlNType) this._listBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); try while(xmlTxtRd.Read() for (int i = 0; i xmlNType.Length; i+) if (xmlTxtRd.NodeType = xmlNTypei) th
20、is._listBox.Items.Add(xmlTxtRd.Name + is Type + xmlTxtRd.NodeType.ToString(); catch(XmlException exp) throw new XmlException(_errMsg + this.xmlPath + exp.ToString(); finally if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); / summary/ 读取 Xml 文件的所有文本节点值/ /summarypublic void ReadXmlTextV alue() this._
21、listBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 29 页 - - - - - - - - - try while(xmlTxtRd.Read() if (xmlTxtRd.NodeType = XmlNodeType.Text) this._listBox.Items.Add(xmlTxtRd.Value); catch(Xml
22、Exception xmlExp) throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString(); finally if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); / summary/ 读取 Xml 文件的属性/ /summarypublic void ReadXmlAttributes() this._listBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); try while(xm
23、lTxtRd.Read() if (xmlTxtRd.NodeType = XmlNodeType.Element) if (xmlTxtRd.HasAttributes) this._listBox.Items.Add(The Element + xmlTxtRd.Name + has + xmlTxtRd.AttributeCount + Attributes); this._listBox.Items.Add(The Attributes are:); while(xmlTxtRd.MoveToNextAttribute() 名师资料总结 - - -精品资料欢迎下载 - - - - -
24、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 29 页 - - - - - - - - - this._listBox.Items.Add(xmlTxtRd.Name + = + xmlTxtRd.V alue); else this._listBox.Items.Add(The Element + xmlTxtRd.Name + has no Attribute); this._listBox.Items.Add(); catch(XmlException xmlExp) throw new XmlException(_errM
25、sg + this._xmlPath + xmlExp.ToString(); finally if (this.xmlTxtRd != null) this.xmlTxtRd.Close(); / summary/ 读取 Xml 文件的命名空间/ /summarypublic void ReadXmlNamespace() this._listBox.Items.Clear(); this.xmlTxtRd = new XmlTextReader(this._xmlPath); try while(xmlTxtRd.Read() if (xmlTxtRd.NodeType = XmlNode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年在VisualC#中使用XML指南之读取XML推荐 2022 VisualC 使用 XML 指南 读取 推荐
限制150内