当前位置:文档之家› C#中常用的几种读取XML文件的方法

C#中常用的几种读取XML文件的方法

C#中常用的几种读取XML文件的方法
C#中常用的几种读取XML文件的方法

C#中常用的几种读取XML文件的方法

https://www.doczj.com/doc/5b10011414.html,/tiemufeng1122/article/details/6723764

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件。

“在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。”具体参见在Visual C#中使用XML指南之读取XML

下面我将介绍三种常用的读取XML文件的方法。分别是

1:使用 XmlDocument

2:使用 XmlTextReader

3:使用 Linq to Xml

这里我先创建一个XML文件,名为Book.xml下面所有的方法都是基于这个XML文件的,文件内容如下:

1:

2:

3:

4:

5: 数据结构

6: 严蔚敏

7: 30.00

8:

9:

10: 路由型与交换型互联网基础

11: 程庆梅

12: 27.00

13:

14:

15: 计算机硬件技术基础

16: 李继灿

17: 25.00

18:

19:

20: 软件质量保证与管理

21: 朱少民

22: 39.00

23:

24:

25: 算法设计与分析

26: 王红梅

27: 23.00

28:

29:

30: 计算机操作系统

31: 7-111-19149-1

32: 28

33:

34:

为了方便读取,我还定义一个书的实体类,名为BookModel,具体内容如下:

1: using System;

2: using System.Collections.Generic;

3: using System.Linq;

4: using System.Text;

5:

6: namespace 使用XmlDocument

7: {

8: public class BookModel

9: {

10: public BookModel()

11: { }

12: ///

13: /// 所对应的课程类型

14: ///

15: private string bookType;

16:

17: public string BookType

18: {

19: get { return bookType; }

20: set { bookType = value; }

21: }

22:

23: ///

24: /// 书所对应的ISBN号

25: ///

26: private string bookISBN;

27:

28: public string BookISBN

29: {

30: get { return bookISBN; }

31: set { bookISBN = value; }

32: }

33:

34: ///

35: /// 书名

36: ///

37: private string bookName;

38:

39: public string BookName

40: {

41: get { return bookName; }

42: set { bookName = value; }

43: }

44:

45: ///

46: /// 作者

47: ///

48: private string bookAuthor;

49:

50: public string BookAuthor

51: {

52: get { return bookAuthor; }

53: set { bookAuthor = value; }

54: }

55:

56: ///

57: /// 价格

58: ///

59: private double bookPrice;

60:

61: public double BookPrice

62: {

63: get { return bookPrice; }

64: set { bookPrice = value; }

65: }

66: }

67: }

1.使用XmlDocument.

使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML 文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:

1: xn 代表一个结点

2: https://www.doczj.com/doc/5b10011414.html,;//这个结点的名称

3: xn.Value;//这个结点的值

4: xn.ChildNodes;//这个结点的所有子结点

5: xn.ParentNode;//这个结点的父结点

6: .......

1.1 读取所有的数据.

使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.

1: XmlDocument doc = new XmlDocument();

2: doc.Load(@"..\..\Book.xml");

然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码

1: // 得到根节点bookstore

2: XmlNode xn = xmlDoc.SelectSingleNode("bookstore");

3:

4:

5: // 得到根节点的所有子节点

6: XmlNodeList xnl = xn.ChildNodes;

7:

8: foreach (XmlNode xn1 in xnl)

9: {

10: BookModel bookModel = new BookModel();

11: // 将节点转换为元素,便于得到节点的属性值

12: XmlElement xe = (XmlElement)xn1;

13: // 得到Type和ISBN两个属性的属性值

14: bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();

15: bookModel.BookType = xe.GetAttribute("Type").ToString();

16: // 得到Book节点的所有子节点

17: XmlNodeList xnl0 = xe.ChildNodes;

18: bookModel.BookName=xnl0.Item(0).InnerText;

19: bookModel.BookAuthor=xnl0.Item(1).InnerText;

20: bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);

21: bookModeList.Add(bookModel);

22: }

23: dgvBookInfo.DataSource = bookModeList;

在正常情况下,上面的代码好像没有什么问题,但是对于读取上面的XML文件,则会出错,原因就是因为我上面的XML文件里面有注释,大家可以参看Book.xml 文件中的第三行,我随便加的一句注释.注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错."无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。"

幸亏它里面自带了解决办法,那就是在读取的时候,告诉编译器让它忽略掉里面的注释信息.修改如下:

1: XmlDocument xmlDoc = new XmlDocument();

2: XmlReaderSettings settings = new XmlReaderSettings();

3: settings.IgnoreComments = true;//忽略文档里面的注释

4: XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);

5: xmlDoc.Load(reader);

最后读取完毕后,记得要关掉reader.

1: reader.Close();

这样它就不会出现错误.

最后运行结果如下:

1.2 增加一本书的信息.

向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性.具体代码如下:

加载文件并选出要结点:

1: XmlDocument doc = new XmlDocument();

2: doc.Load(@"..\..\Book.xml");

3: XmlNode root = doc.SelectSingleNode("bookstore");

创建一个结点,并设置结点的属性:

1: XmlElement xelKey = doc.CreateElement("book");

2: XmlAttribute xelType = doc.CreateAttribute("Type");

3: xelType.InnerText = "adfdsf";

4: xelKey.SetAttributeNode(xelType);

创建子结点:

1: XmlElement xelAuthor = doc.CreateElement("author");

2: xelAuthor.InnerText = "dfdsa";

3: xelKey.AppendChild(xelAuthor);

最后把book结点挂接在要结点上,并保存整个文件:

1: root.AppendChild(xelKey);

2: doc.Save(@"..\..\Book.xml");

用上面的方法,是向已有的文件上追加数据,如果想覆盖原有的所有数据,可以更改一下,使用LoadXml方法:

1: XmlDocument doc = new XmlDocument();

2: doc.LoadXml("");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据

直接把根结点选择出来了,后面不用SelectSingleNode方法选择根结点,直接创建结点即可,代码同上.

1.3 删除某一个数据

想要删除某一个结点,直接找到其父结点,然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,上面的SelectSingleNode可以传入一个Xpath 表,我们通过书的ISBN号来找到这本书所在的结点.如下:

1: XmlElement xe = xmlDoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement.

2: string strPath = string.Format("/bookstore/book[@ISBN=\"{0}\"]",

dgvBookInfo.CurrentRow.Cells[1].Value.ToString());

3: XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath);

//selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.

4: selectXe.ParentNode.RemoveChild(selectXe);

"/bookstore/book[@ISBN=\"{0}\"]"是一个Xpath表达式,找到ISBN号为所选那一行ISBN号的那本书,有关Xpath的知识请参考:XPath 语法

1.4 修改某要条数据

修改某条数据的话,首先也是用Xpath表达式找到所需要修改的那一个结点,然后如果是元素的话,就直接对这个元素赋值,如果是属性的话,就用SetAttribute方法设置即可.如下:

1: XmlElement xe = xmlDoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement.

2: string strPath = string.Format("/bookstore/book[@ISBN=\"{0}\"]",

dgvBookInfo.CurrentRow.Cells[1].Value.ToString());

3: XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath);

//selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.

4: selectXe.SetAttribute("Type",

dgvBookInfo.CurrentRow.Cells[0].Value.ToString());//也可以通过SetAttribute来增加一个属性 5: selectXe.GetElementsByTagName("title").Item(0).InnerText =

dgvBookInfo.CurrentRow.Cells[2].Value.ToString();

6: selectXe.GetElementsByTagName("author").Item(0).InnerText =

dgvBookInfo.CurrentRow.Cells[3].Value.ToString();

7: selectXe.GetElementsByTagName("price").Item(0).InnerText =

dgvBookInfo.CurrentRow.Cells[4].Value.ToString();

8: xmlDoc.Save(@"..\..\Book.xml");

2.使用XmlTextReader和XmlTextWriter

XmlTextReader和XmlTextWriter是以流的形式来读写XML文件.

2.1XmlTextReader

使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的操作.如下:

1: XmlTextReader reader = new XmlTextReader(@"..\..\Book.xml");

2: List modelList = new List();

3: BookModel model = new BookModel();

4: while (reader.Read())

5: {

6:

7: if (reader.NodeType == XmlNodeType.Element)

8: {

9: if (https://www.doczj.com/doc/5b10011414.html, == "book")

10: {

11: model.BookType = reader.GetAttribute(0);

12: model.BookISBN = reader.GetAttribute(1);

13: }

14: if (https://www.doczj.com/doc/5b10011414.html, == "title")

15: {

16: model.BookName=reader.ReadElementString().Trim();

17: }

18: if (https://www.doczj.com/doc/5b10011414.html, == "author")

19: {

20: model.BookAuthor = reader.ReadElementString().Trim();

21: }

22: if (https://www.doczj.com/doc/5b10011414.html, == "price")

23: {

24: model.BookPrice =

Convert.ToDouble(reader.ReadElementString().Trim());

25: }

26: }

27:

28: if (reader.NodeType == XmlNodeType.EndElement)

29: {

30: modelList.Add(model);

31: model = new BookModel();

32: }

33:

34:

35: }

36: modelList.RemoveAt(modelList.Count-1);

37: this.dgvBookInfo.DataSource = modelList;

关键是读取属性的时候,你要先知道哪一个结点具有几个属性,然后通过GetAttribute方法来读取.读取属性还可以用另外一种方法,就是用MoveToAttribute方法.可参见下面的代码:

1: if (https://www.doczj.com/doc/5b10011414.html, == "book")

2: {

3: for (int i = 0; i < reader.AttributeCount; i++)

4: {

5: reader.MoveToAttribute(i);

6: string str = "属性:" + https://www.doczj.com/doc/5b10011414.html, + "=" + reader.Value;

7: }

8: model.BookType = reader.GetAttribute(0);

9: model.BookISBN = reader.GetAttribute(1);

10: }

效果如下:

2.2XmlTextWriter

XmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它将创建此文件.首先设置一下,你要创建的XML文件格式,

1: XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"..\..\Book1.xml", null);

2: //使用 Formatting 属性指定希望将 XML 设定为何种格式。这样,子元素就可以通过使用Indentation 和 IndentChar 属性来缩进。

3: myXmlTextWriter.Formatting = Formatting.Indented;

然后可以通过WriteStartElement和WriteElementString方法来创建元素,这两者的区别就是如果有子结点的元素,那么创建的时候就用WriteStartElement,然后去创建子元素,创建完毕后,要调用相应的WriteEndElement来告诉编译器,创建完毕,用WriteElementString来创建单个的元素,用WriteAttributeString来创建属性.如下:

1: XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"..\..\Book1.xml", null);

2: //使用 Formatting 属性指定希望将 XML 设定为何种格式。这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。

3: myXmlTextWriter.Formatting = Formatting.Indented;

4:

5: myXmlTextWriter.WriteStartDocument(false);

6: myXmlTextWriter.WriteStartElement("bookstore");

7:

8: myXmlTextWriter.WriteComment("记录书本的信息");

9: myXmlTextWriter.WriteStartElement("book");

10:

11: myXmlTextWriter.WriteAttributeString("Type", "选修课");

12: myXmlTextWriter.WriteAttributeString("ISBN", "111111111");

13:

14: myXmlTextWriter.WriteElementString("author","张三");

15: myXmlTextWriter.WriteElementString("title", "职业生涯规划");

16: myXmlTextWriter.WriteElementString("price", "16.00");

17:

18: myXmlTextWriter.WriteEndElement();

19: myXmlTextWriter.WriteEndElement();

20:

21: myXmlTextWriter.Flush();

22: myXmlTextWriter.Close();

3.使用Linq to XML.

Linq是C#3.0中出现的一个新特性,使用它可以方便的操作许多数据源,也包括XML文件.使用Linq操作XML文件非常的方便,而且也比较简单.下面直接看代码,

先定义一个方法显示查询出来的数据

1: private void showInfoByElements(IEnumerable elements)

2: {

3: List modelList = new List();

4: foreach (var ele in elements)

5: {

6: BookModel model = new BookModel();

7: model.BookAuthor = ele.Element("author").Value;

8: model.BookName = ele.Element("title").Value;

9: model.BookPrice = Convert.ToDouble(ele.Element("price").Value); 10: model.BookISBN=ele.Attribute("ISBN").Value;

11: model.BookType=ele.Attribute("Type").Value;

12:

13: modelList.Add(model);

14: }

15: dgvBookInfo.DataSource = modelList;

16: }

3.1读取所有的数据

直接找到元素为book的这个结点,然后遍历读取所有的结果.

1: private void btnReadAll_Click(object sender, EventArgs e)

2: {

3: XElement xe = XElement.Load(@"..\..\Book.xml");

4: IEnumerable elements = from ele in xe.Elements("book")

5: select ele;

6: showInfoByElements(elements);

7: }

3.2插入一条数据

插入结点和属性都采用new的方法,如下:

1: private void btnInsert_Click(object sender, EventArgs e)

2: {

3: XElement xe = XElement.Load(@"..\..\Book.xml");

4: XElement record = new XElement(

5: new XElement("book",

6: new XAttribute("Type", "选修课"),

7: new XAttribute("ISBN","7-111-19149-1"),

8: new XElement("title", "计算机操作系统"),

9: new XElement("author", "7-111-19149-1"),

10: new XElement("price", 28.00)));

11: xe.Add(record);

12: xe.Save(@"..\..\Book.xml");

13: MessageBox.Show("插入成功!");

14: btnReadAll_Click(sender, e);

15: }

3.3 删除选中的数据

首先得到选中的那一行,通过ISBN号来找到这个元素,然后用Remove方法直接删除,如下:

1: private void btnDelete_Click(object sender, EventArgs e)

2: {

3: if (dgvBookInfo.CurrentRow != null)

4: {

5: //dgvBookInfo.CurrentRow.Cells[1]对应着ISBN号

6: string id = dgvBookInfo.CurrentRow.Cells[1].Value.ToString();

7: XElement xe = XElement.Load(@"..\..\Book.xml");

8: IEnumerable elements = from ele in xe.Elements("book")

9: where

(string)ele.Attribute("ISBN") == id

10: select ele;

12: {

11: if (elements.Count() > 0)

13: elements.First().Remove();

14: }

15: xe.Save(@"..\..\Book.xml");

16: MessageBox.Show("删除成功!");

17: btnReadAll_Click(sender, e);

18:

19: }

20: }

3.4 删除所有的数据

与上面的类似,选出所有的数据,然后用Remove方法,如下:

1: private void btnDeleteAll_Click(object sender, EventArgs e)

2: {

3: XElement xe = XElement.Load(@"..\..\Book.xml");

4: IEnumerable elements = from ele in xe.Elements("book")

5: select ele;

6: if (elements.Count() > 0)

7: {

8: elements.Remove();

9: }

10: xe.Save(@"..\..\Book.xml");

11: MessageBox.Show("删除成功!");

12: btnReadAll_Click(sender, e);

13: }

3.5 修改某一记录

首先得到所要修改的某一个结点,然后用SetAttributeValue来修改属性,用ReplaceNodes来修改结点元素。如下:

1: private void btnSave_Click(object sender, EventArgs e)

2: {

3: XElement xe = XElement.Load(@"..\..\Book.xml");

4: if (dgvBookInfo.CurrentRow != null)

5: {

6: //dgvBookInfo.CurrentRow.Cells[1]对应着ISBN号

7: string id = dgvBookInfo.CurrentRow.Cells[1].Value.ToString();

8: IEnumerable element = from ele in xe.Elements("book")

9: where ele.Attribute("ISBN").Value == id 10: select ele;

11: if (element.Count() > 0)

12: {

13: XElement first = element.First();

14: ///设置新的属性

15: first.SetAttributeValue("Type",

dgvBookInfo.CurrentRow.Cells[0].Value.ToString());

16: ///替换新的节点

17: first.ReplaceNodes(

18: new XElement("title",

dgvBookInfo.CurrentRow.Cells[2].Value.ToString()),

19: new XElement("author",

dgvBookInfo.CurrentRow.Cells[3].Value.ToString()),

20: new XElement("price",

(double)dgvBookInfo.CurrentRow.Cells[4].Value)

21: );

22: }

23: xe.Save(@"..\..\Book.xml");

24:

25: MessageBox.Show("修改成功!");

26: btnReadAll_Click(sender, e);

27: }

28: }

最终效果如下:

有关Linq to XML的知识大家可以参考LINQ国人首创LINQ专著——《精通LINQ数据访问技术》

如何用vc创建和读取xml文件

如何用vc创建和读取xml文件 当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。XML (eXtensible Markup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大缩减了SGML的复杂性。XML语言系统建立的目的就是使它不仅能够表示文档的内容,而且可以表示文档的结构,这样在同时能够被人类理解的同时,也能够被机器所理解。XML要求遵循一定的严格的标准。XML分析程序比HTML浏览器更加要挑剔语法和结构,XML要求正在创建的网页正确的使用语法和结构,而不是象HTML一样,通过浏览器推测文档中应该是什么东西来实现HTML的显示,XML使得分析程序不论在性能还是稳定性方面都更容易实现。XML文档每次的分析结果都是一致的,不象HTML,不同的浏览器可能对同一个HTML作出不同的分析和显示。 同时因为分析程序不需要花时间重建不完整的文档,所以它们能比同类HTML能更有效地执行其任务。它们能全力以赴地根据已经包含在文档中的那个树结构建造出相应的树来,而不用在信息流中的混合结构的基础上进行显示。XML标准是对数据的处理应用,而不是只针对Web网页的。任何类型的应用都可以在分析程序的上面进行建造,浏览器只是XML的一个小的组成部分。当然,浏览仍旧极其重要,因为它为XML工作人员提供用于阅读信息的友好工具。但对更大的项目来说它就不过是一个显示窗口。因为XML具有严格的语法结构,所以我们甚至可以用XML来定义一个应用层的通讯协议,比如互联网开放贸易协议(Internet Open Trading Protocol)就是用XML来定义的。从某种意义上说,以前我们用BNF范式定义的一些协议和格式从原则上说都可以用XML来定义。实际上,如果我们有足够的耐心,我们完全可以用XML来定义一个C++语言的规范。 当然,XML允许大量HTML样式的形式自由的开发,但是它对规则的要求更加严格。XML主要有三个要素:DTD(Document Type Declaration——文档类型声明)或XML Schema(XML大纲)、XSL(eXtensible Stylesheet Language——可扩展样式语言)和XLink(eXtensible Link Language——可扩展链接语言)。DTD和XML大纲规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素和元素的属性之间的关系;Namespace(名域)实现统一的XML文档数据表示以及数据的相互集成;XSL是用于规定XML文档呈现样式的语言,它使得数据与其表现形式相互独立,比如XSL能使Web浏览器改变文档的表示法,例如数据的显示顺序的变化,不需要再与服务器进行通讯。通过改变样式表,同一个文档可以显示得更大,或者经过折叠只显示外面得一层,或者可以变为打印得格式。而XLink将进一步扩展目前Web上已有的简单链接。 二、实现XML解析的说明 当然,从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但是实际上微软已经给我们提供了一个XML语法解析器,如果你安装了IE5.0以上版本的话,实际上你就已经安装了XML语法解析器。可以从微软站点(https://www.doczj.com/doc/5b10011414.html,)下载最新的MSXML的SDK和Parser文件。它是一个叫做MSXML.DLL的动态链接库,最新版本为msxml3,实际上它是一个COM对象库,里面封装了所有进行XML解析所需要的所有必要的对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象。所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是剧本语言等等)对它进行调用,

asp读取xml文件的方法

asp读取xml文件的方法 大家知道asp读取xml文件吗?下面我们就给大家详细介绍一下吧!我们积累了一些经验,在此拿出来与大家分享下,请大家互相指正。 ? strSourceFile=Server.MapPath(dataxml&”/Advertisement/”&id&”/a dv.xml”) ?SetobjXML=Server.CreateObject(“Microsoft.XMLDOM”)'创建一个XML对像 ?objXML.load(strSourceFile)'把XML文件读入内存 ?Setxml=objXML.documentElement.selectSingleNode(“Advertisement”)'选取节点Advertisement ?ADid=xml.childNodes.item(0).text ?ADname=xml.childNodes.item(1).text ?ADintro=xml.childNodes.item(2).text ?ADact=xml.childNodes.item(3).text ?ADclass=xml.childNodes.item(4).text ?Pids=xml.childNodes.item(5).text ?Picid=xml.childNodes.item(6).text ?ADurl=xml.childNodes.item(7).text ?ADwindow=xml.childNodes.item(8).text ?ADshow=xml.childNodes.item(9).text ?ADshows=xml.childNodes.item(10).text ?ADclick=xml.childNodes.item(11).text

java读写xml文件的方法

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB 1. DOM(Document Object Model) 此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。 实例: Java代码 1.import javax.xml.parsers.*; 2.//XML解析器接口 3.import org.w3c.dom.*; 4.//XML的DOM实现 5.import org.apache.crimson.tree.XmlDocument; 6.//写XML文件要用到 7.DocumentBuilderFactory factory = DocumentBuilderFactory.newInst ance(); 8. //允许名字空间 9. factory.setNamespaceAware(true); 10. //允许验证 11. factory.setValidating(true); 12. //获得DocumentBuilder的一个实例 13.try { 14. DocumentBuilder builder = factory.newDocumentBuilder(); 15.} catch (ParserConfigurationException pce) { 16.System.err.println(pce); 17.// 出异常时输出异常信息,然后退出,下同 18.System.exit(1); 19.} 20.//解析文档,并获得一个Document实例。 21.try { 22.Document doc = builder.parse(fileURI); 23.} catch (DOMException dom) { 24.System.err.println(dom.getMessage()); 25.System.exit(1); 26.} catch (IOException ioe) { 27.System.err.println(ioe); 28.System.exit(1); 29.}

XML文件基本操作

XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Language,标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule)。 任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得 含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档 类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定,那么这个文档是"模式有效的(schema valid)"。 XML文件在存储、交换和传输数据信息上有着很方便处理,那么今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作, 如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂(用于自己的学习和记忆只需,同时也希望能够给你带来一些帮助, 如有不合适的地方欢迎大家批评指正)。 本文的主要模块为: ①:生成xml文件 ②:遍历xml文件的节点信息 ③:修改xml文件的节点信息 ④:向xml文件添加节点信息 ⑤:删除指定xml文件的节点信息假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示: Lenovo 5000 IBM 10000 那么如何生成这个xml文件?又怎么读取这个xml文件的节点信息,以及如何对这个xml文件的节点信息作相应的操作?请看如下代码示例: 【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间System.Xml】1using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace OperateXML 8{

C#读取XML文件经典案例,不经典你抽我!

读取XML到ListBox/ComboBox 1,知识需求: (1)访问XML文件的两个基本模型: 一,DOM模型;使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。 二,流模型;流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补。C#采用流模型。 流模型每次迭代XML文档中的一个节点,适合于处理较大的文档,所耗内存空间小。流模型中有两种变体——“推”push模型和pull“拉”模型。 推模型也就是常说的SAX,SAX是一种靠事件驱动的模型,也就是说:它每发现一个节点就用推模型引发一个事件,而我们必须编写这些事件的处理程序,这样的做法非常的不灵活,也很麻烦。 .NET中使用的是基于“拉”模型的实现方案,“拉”模型在遍历文档时会把感兴趣的文档部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,在性能上“拉”模型可以选择性的处理节点,而SAX每发现一个节点都会通知客户机,从而,使用“拉”模型可以提高Application的整体效率。在.NET中“拉”模型是作为XmlReader类(抽象类)实现的 (2)XmlReader类 Represents a reader that provides fast, non-cached, forward-only access to XML data. 该类中有三个重要的衍生类:XmlT extReader;XmlT extValidatingReader;XmlNodeReader (3)XmlNodeType枚举 该枚举里面有很多实用的数。 2,案例(VS2008+XML)

C#中常用的几种读取XML文件的方法

C#中常用的几种读取XML文件的方法 https://www.doczj.com/doc/5b10011414.html,/tiemufeng1122/article/details/6723764 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件。 “在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。”具体参见在Visual C#中使用XML指南之读取XML 下面我将介绍三种常用的读取XML文件的方法。分别是 1:使用 XmlDocument 2:使用 XmlTextReader 3:使用 Linq to Xml 这里我先创建一个XML文件,名为Book.xml下面所有的方法都是基于这个XML文件的,文件内容如下: 1: 2: 3: 4: 5: 数据结构 6: 严蔚敏 7: 30.00 8: 9: 10: 路由型与交换型互联网基础 11: 程庆梅 12: 27.00 13: 14: 15: 计算机硬件技术基础 16: 李继灿 17: 25.00

python读取xml文件

python读取xml文件 还可以参见网址https://www.doczj.com/doc/5b10011414.html,/uid-22183602-id-3036442.html https://www.doczj.com/doc/5b10011414.html,/uid-22183602-id-3036442.html 2014-03-04 23:43 by 虫师, 13913 阅读, 1 评论, 收藏, 编辑 关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码。这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件。 什么是xml? xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 abc.xml 4 Python 测试 Zope Ok ,从结构上,它很像我们常见的HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。 那么它有如下特征:

首先,它是有标签对组成, 标签可以有属性: 标签对可以嵌入数据:abc 标签可以嵌入子标签(具有层级关系): 获得标签属性 那么,下面来介绍如何用python来读取这种类型的文件。 #coding=utf-8import xml.dom.minidom #打开xml文档 dom = xml.dom.minidom.parse('abc.xml') #得到文档元素对象 root = dom.documentElement print root.nodeName print root.nodeValue print root.nodeType print root.ELEMENT_NODE mxl.dom.minidom 模块被用来处理xml文件,所以要先引入。 xml.dom.minidom.parse() 用于打开一个xml文件,并将这个文件对象dom变量。 documentElement 用于得到dom对象的文档元素,并把获得的对象给root 每一个结点都有它的nodeName,nodeValue,nodeType属性。 nodeName为结点名字。 nodeValue是结点的值,只对文本结点有效。 nodeType是结点的类型。catalog是ELEMENT_NODE类型

Android读写XML

Android读写XML(上)——package说明收藏 注明:本文转自https://www.doczj.com/doc/5b10011414.html,. XML 经常用作Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,来说明Android SDK提供的读写XML的package。 首先介绍下Android SDK与Java SDK在读写XML文件方面,数据包之间的关系。Android 平台最大的一个优势在于它利用了Java 编程语言。Android SDK 并未向标准Java Runtime Environment (JRE) 提供一切可用功能,但它支持其中很大一部分功能。Java 平台支持通过许多不同的方式来使用XML,并且大多数与XML 相关的Java API 在Android 上得到了完全支持。举例来说,Java 的Simple API for XML (SAX) 和Document Object Model (DOM) 在Android 上都是可用的,这些API 多年以来一直都是Java 技术的一部分,较新的Streaming API for XML (StAX) 在Android 中并不可用。但是,Android 提供了一个功能相当的库。最后,Java XML Binding API 在Android 中也不可用,这个API 已确定可以在Android 中实现。Android SDK提供了如下package来支持XML的读写: 额外补充说明下,在android.util数据包中也提供了一个类Xml,不过这个类就是把以上package简单封装了下。 读取XML主要有2种方法:DOM与SAX(Simple API for XML),在这里对这2种方法分别加以说明。 DOM(文档对象模型),为XML文档的解析定义了一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,然后代码就可以使用DOM接口来操组整个树结构,其他点如下: ?优点:整个文档树都在内存当中,便于操作;支持删除、修改、重新排列等多功能。?缺点:将整个文档调入内存(经常包含大量无用的节点),浪费时间和空间。 ?使用场合:一旦解析了文档还需要多次访问这些数据,而且资源比较充足(如内存、CPU等)。 为了解决DOM解析XML引起的这些问题,出现了SAX。SAX解析XML文档为事件驱动,详细说明请阅读Android读写XML(中)–SAX。当解析器发现元素开始、元素结束,文本、文档的开始或者结束时,发送事件,在程序中编写响应这些事件的代码,其特点如下: ?优点:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。

xml文件解析

查找结点,读取结点属性------------------------------------------------------ 获取结点的属性------------------------------------- 设置结点的属性------------------------------------------------ 给结点添加新属性------------------------------------------- 设置一个结点的内容---------------------------------------------------- 添加新节点---------------------------------------------------- 编码问题------------------------------------------------------------------ XML树: John Fleck June 2, 2002 example keyword This is the headline This is the body text. 1:查找结点 #include #include #include #include #include Void parseStory (xmlDocPtr doc, xmlNodePtr cur) { xmlChar *key; cur = cur->xmlChildrenNode; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword")))

Java解析XML文件

Java解析XML文件 ========================================== xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> ========================================== 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByT agName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" +

jdom读取解析XML文件

jdom学习读取XML文件 用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类、Element类等的方法读取所需的内容。 例如: 8G 200 1580 10G 500 3000 则解析类: import java.util.*; import org.jdom.*; import org.jdom.input.SAXBuilder; publicclass Sample { publicstaticvoid main(String[] args) throws Exception{ SAXBuildersb=new SAXBuilder(); Document doc=sb.build(Sample.class.getClassLoader().getResourceAsStream("test. xml")); //构造文档对象 Element root=doc.getRootElement(); //获取根元素 List list=root.getChildren("disk");//取名字为disk的所有元素 for(int i=0;i

OpenCV笔记(一)-XML文件读写

OpenCV笔记(一)-XML文件读写 平台:ubuntu10.04 + OpenCV2.3 + cmake 1. XML、YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "test.xml"; FileStorage fs(filename, FileStorage::WRITE); \\或者 fs.open(filename, FileStorage::WRITE); // 文件读写模式 // file storage mode enum { READ=0, //! read mode WRITE=1, //! write mode APPEND=2 //! append mode }; 文件关闭操作会在FileStorage结构销毁时自动进行,但也可调用如下函数实现fs.release(); 2.文本和数字的输入和输出 写入文件使用<< 运算符,例如: fs << "iterationNr" << 100; 读取文件,使用>> 运算符,例如 int itNr; fs["iterationNr"] >> itNr; itNr = (int) fs["iterationNr"]; 3. OpenCV数据结构的输入和输出,和基本的C++形式相同 Mat R = Mat_::eye (3, 3), T = Mat_::zeros(3, 1); fs << "R" << R; // Write cv::Mat fs << "T" << T;

Java中如何读取xml文件

java里有个properties类可以用它来读取XML文件xml文件: Xml代码 A1234 河南省郑州市 B1234 河南省郑州市二七区

第一种DOM 实现方法: Java代码 import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class MyXMLReader2DOM { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { File f = new File("data_10k.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("VALUE"); for (int i = 0; i < nl.getLength(); i++) { System.out.print("车牌号码:"+ doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); System.out.println("车主地址:"+ doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒"); } } } catch (Exception e) { e.printStackTrace();

xml文件的读写

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml; ///

/// xml文件的读写类 /// public class xml { public xml() { // // TODO: 在此处添加构造函数逻辑 // } /// /// 把数据写到xml文件中 /// /// 要打开的XML文件 /// 学生的姓名 /// 学生的年龄 /// 学生的性别 public void WriteXml(string FileName, string name, string age, string sex) { //初始化XML文档操作类 XmlDocument myXml = new XmlDocument(); //加载指定的XML文件 myXml.Load(FileName); //添加元素-姓名 XmlElement ele0 = myXml.CreateElement("name"); XmlText Text0 = myXml.CreateTextNode(name); //添加元素-年龄

C#中读取xml文件指定节点

C#中读取xml文件指定节点 假设xml文件内容是 1 start 1 1 1 2 pass 2 2 2 我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。 1.XmlDocument.SelectSingleNode方法的使用 首先创建一个读取xml文件的方法ReadXmlNode ///

/// 读取xml中的指定节点的值 /// public void ReadXmlNode(string filename) { XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.Load(filename); //读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点 XmlNode root = xmlDoc.SelectSingleNode("//Activity");//当节点Workflow 带有属性是,使用SelectSingleNode无法读取 if (root != null) {

XML文件读取的资料

XML文档对象模型也就是(DOM) 就像层次结构的树,主要用于在内存中表示XML文档 1)DOM树定义了XML文档的逻辑结构,给出了一种应用程序访问和处理XML文档的方法。 2)在DOM树中,有一个根节点,所有其他的节点都是根节点的后代。 3) 在应用过程中,基于DOM的XML分析器将一个XML文档转换成一棵DOM树,应用程序通过对DOM树的操作,来实现对XML文档数据的操作。 三、XML文档对象(XML DOM)模型分析 XML DOM对象提供了一个标准的方法来操作存储在XML文档中的信息,DOM应用编程接口(API)用来作为应用程序和XML文档之间的桥梁。 DOM可以认为是一个标准的结构体系用来连接文档和应用程序(也可以是剧本语言)。MSXML解析器允许你装载和创建一个文档,收集文档的错误信息,得到和操作文档中的所有的信息和结构,并把文档保存在一个XML 文件中。DOM提供给用户一个接口来装载、到达和操作并序列化XML文档。DOM提供了对存储在内存中的XML文档的一个完全的表示,提供了可以随机访问整个文档的方法。DOM允许应用程序根据MSXML解析器提供的逻辑结构来操作XML文档中的信息。利用MSXML所提供的接口来操作XML。 实际上MSXML解析器根据XML文档生成一个DOM树结构,它能够读XML 文档并根据XML文档内容创建一个节点的逻辑结构,文档本身被认为是一个包含了所有其他节点的节点。 DOM使用户能够把文档看成是一个有结构的信息树,而不是简单的文本流。这样即使不知道XML的语义细节,应用程序或者是脚本也能够方便地操作该结构。DOM包含两个关键的抽象:一个树状的层次、另一个是用来表示文档内容和结构的节点集合。树状层次包括了所有这些节点,节点本身也可以包含其他的节点。这样的好处是对于开发人员来说,他可以通过这个层次结构来找到并修改相应的某一个节点的信息。DOM把节点看成是一个通常的对象,这样就有可能创建一个剧本来装载一个文档,然后遍历所有的节点,显示感兴趣的节点的信息。注意节点可以有很多中具体的类型,比如元素、属性和文本都可以认为是一个节点。 微软的MSXML解析器读一个XML文档,然后把它的内容解析到一个抽象的信息容器中称为节点(NODES)。这些节点代表文档的结构和内容,并允许应用程序来读和操作文档中的信息而不需要显示知道的XML的语义。在一个文档被解析以后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。 对开发人员来说,最重要的编程对象是DOMDocument。DOMDocument对象通过暴露属性和方法来允许浏览、查询和修改XML文档的内容和结构,每一个接下来的对象暴露自己的属性和方法,这样就能够收集关于对象实

java读取XML文件内容的四种方法

Java parse XML methods(4) 关键字: xml 1. 介绍 1>DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2>SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3>JDOM https://www.doczj.com/doc/5b10011414.html, JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学 习曲线假定为20%)。JDOM对于大多数 Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。

相关主题
文本预览
相关文档 最新文档