C#中读取XML文件方法

  • XML
    • 简介
    • 格式
  • c#读取XML文件方法
    • 使用XmlDocument
      • 操作
      • 注意
        • 解决方法:
    • 使用XmlTextReader/XmlTextWriter
      • 操作
    • 使用Linq to Xml
      • 操作
    • 使用DataSet
      • 操作

XML

简介

Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

格式

实例:

文件名:test.xml

<?xml version="1.0" encoding="UTF-8"?>
<notes><note Type="1"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note><note Type="2"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>
</notes>

c#读取XML文件方法

使用XmlDocument

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

 xn 代表一个结点xn.Name;//这个结点的名称 xn.Value;//这个结点的值 xn.ChildNodes;//这个结点的所有子结点 xn.ParentNode;//这个结点的父结点 .......

操作

//声明XmlDocument对象,并加载XML文件
XmlDocument doc = new XmlDocument();
doc.Load(@"test.xml"); //此处为XML文件的路径#region 获取节点
//得到根节点node
XmlNode xn = doc.SelectSingleNode("notes");
//得到根节点的所有子节点
XmlNodeList xnl = xn.ChildNodes;foreach (XmlNode xNode in xnl)
{//将节点转换为元素,便于得到节点的属性值XmlElement xe = (XmlElement)xNode;//得到note节点的属性值string noteType = xe.GetAttribute("Type").ToString();//得到note节点的所有子节点XmlNodeList xnl0 = xe.ChildNodes;string body = xnl0.Item(3).InnerText;//修改节点值xnl0.Item(0).InnerText = "Tovv";
}
#endregion#region 增加节点 -- 以下是追加
//创建一个节点,并设置节点的属性
XmlElement xelKey = doc.createElement_x("note");
XmlAttribute xelType = doc.CreateAttribute("Type");
xelType.InnerText = "3";
xelKey.SetAttributeNode(xelType);
//创建子节点
XmlElement xelAuthor = doc.createElement_x("to");
xelAuthor.InnerText = "Tang";
xelKey.AppendChild(xelAuthor);
//note,并保存整个文件
xn.AppendChild(xelKey);
doc.Save(@"..\..\Book.xml");
#endregion#region 增加节点 -- 以下是覆盖
XmlDocument doc = new XmlDocument();
doc.LoadXml("<notes></notes>");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据
#endregion#region 删除节点
XmlElement xe = xmlDoc.DocumentElement;
string strPath = string.Format("/notes/notes[@Type=\"{0}\"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString());
XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
selectXe.ParentNode.RemoveChild(selectXe); //移除节点
#endregion

注意

当XML文件中含有注释时,则会出错,因为注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错.“无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。”

解决方法:

XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);
xmlDoc.Load(reader);//最后读取完毕后,记得要关掉reader
reader.Close();

使用XmlTextReader/XmlTextWriter

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

操作

//使用XmlTextReader读文件
XmlTextReader reader = new XmlTextREADER(@"test.xml");while(reader.Read())
{if(reader.NodeType == XmlNodeType.Element){//读取节点属性if(reader.Name == "note"){//第一种方法string nodeType = reader.GetAttribute(0);//另一种方法for(int i = 0; i < reader.AttributeCount; i++){reader.MoveToAttribute(i);string str = "属性:" + reader.Name + "=" + reader.Value;}}//读取节点的值if(reader.Name == "to"){string nodeTo = reader.ReadElementString().Trim();    }if(reader.Name == "from"){string nodeFrom = reader.ReadElementString().Trim();}//当节点类型为尾节点时if(reader.NodeType == XmlNodeType.EndElement){}}
}reader.Close(); //关闭读文件流//使用XmlTextWriter写文件
//XmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它将创建此文件
XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"test.xml", null);
//使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。
myXmlTextWriter.Formatting = Formatting.Indented;myXmlTextWriter.WriteStartDocument(false);
myXmlTextWriter.WriteStartElement("notes"); //写入notes的起始节点myXmlTextWriter.WriteComment("note information"); //写入注释
myXmlTextWriter.WriteStartElement("note"); //写入note的起始节点myXmlTextWriter.WriteAttributeString("Type", "3"); //写入note节点的属性myXmlTextWriter.WriteElementString("to","hong"); //写入note子节点myXmlTextWriter.WriteEndElement(); //写入note的尾节点
myXmlTextWriter.WriteEndElement(); //写入notes的尾节点myXmlTextWriter.Flush(); //结束写入
myXmlTextWriter.Close(); //关闭写入流

使用Linq to Xml

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

操作

XElement xe = XElement.Load(@"test.xml");#region 读取数据
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;foreach(var ele in elements)
{//获取节点的属性string nodeType = ele.Attribute("Type").Value;//获取节点的子节点值string nodeTo = ele.Element("to").Value;
}
#endregion#region 插入数据
XElement record = new XElement(new XElement("note",new XAttribute("Type", "3"),new XElement("to", "tang"),new XElmeent("from", "hong"))
);
xe.Add(record);
xe.Save(@"test.xml");
#endregion#region 删除数据
//删除选中的数据
IEnumerable<XElement> elements = from ele in xe.Elements("note")where (string)ele.Attribute("Type") == 1select ele;if(elements.Count() > 0)elements.First().Remove();xe.Save(@"test.xml");//删除所有的数据
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;if(elements.Count() > 0)elements.Remove();xe.Save(@"test.xml");
#endregion#region 修改数据
IEnumerable<XElement> elements = from ele in xe.Elements("note")where (string)ele.Attribute("Type") == 1select ele;if(elements.Count() > 0)
{XElement first = elements.First();//设置新的属性first.SetAttributeValue("Type", 5);//替换新的节点first.ReplaceNodes(new XElement("to", "tangtang"),new XElmeent("from", "hong"));
}
xe.Save(@"test.xml");
#endregion

使用DataSet

ADO.NET对XML提供了强大的支持,其主要事通过数据集与XML进行交互。

操作

DataSet ds = new DataSet();
//读取文件
ds.ReadXml(@"test.xml");//显示数据
string nodeTo = ds.Tables[0].Rows[0]["to"];
//修改数据
ds.Talbes[0].Rows[0]["to"] = "tos";
//插入数据
DataRow dr = ds.Tables[0].NewRow();
dr["to"] = "dsds";
dr["from"] = "wang";
ds.Tables[0].Rows.Add(dr);
//删除数据
DataRow delR = ds.Tables[0].Rows[0];
ds.Tables[0].Rows.Remove(delR);//保存数据
ds.WriteXml(@"test.xml");

C#中读取XML文件方法相关推荐

  1. matlab分析xml文件_如何在Java中读取XML文件(DOM分析器)

    matlab分析xml文件 Today we will learn how to read the XML file in Java. We will also learn how to parse ...

  2. java jdom 读取xml文件_使用Jdom读取XML文件方法

    使用Jdom读取XML文件方法,学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方 ...

  3. python读取xml文件信息_python读取xml文件方法解析

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python来读取xml文件. 什么是xm ...

  4. SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦.本文介绍在SQL Server中读取XML文件的简单做法. ...

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

    假设xml文件内容是 <?xml version="1.0" encoding="utf-8"?> <Workflow>   <A ...

  6. 在asp.net中读取XML文件信息的4种方法

    方法一 :使用XML控件     <% @ Page Language="C#"%>  <html> <body>         <h3 ...

  7. ASP.NET中读取XML文件4种方法

    参考文章:http://www.cnblogs.com/maoyu417/archive/2007/11/02/946901.html 一共有四种方法,创建一个asp.net项目,下面有四个页面,如下 ...

  8. java读取src xml文件路径_Java获取路径方法相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

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

    XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...

最新文章

  1. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
  2. ubuntu 16.10安装mysql_在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法...
  3. [分享]Windows Phone 7 For Dummies
  4. Js slice()方法和splice()方法
  5. VS C++ 字符大写变换 字符小写变换 tolower toupper
  6. 《线性代数及其应用 第四版》习题1.4
  7. Delphi7+Delphi11下一键安装JCL/JVCL组件包
  8. 计蒜客 - T1212 仙岛求药 BFS+DFS剪枝
  9. 推荐三款好用的终端开发平台
  10. python写excel文件头_Python帮你做Excel——写入Excel文档
  11. android源生获取经纬度,Android获取GPS经纬度
  12. ORACLE莫明其妙出错!
  13. 你真的了解什么是冒烟测试么?
  14. linux环境下解压rar文件
  15. Cesium加载各种互联网地图(一)
  16. 100V降压图纸 电路最简单的高压降压解决方案
  17. c语言红酒编程题,葡萄酒基础知识试题解析一
  18. ICDE 2023 | FASI:一个在大图上对FPGA友好的子图同构算法
  19. 使用python高效办公Excel(直接模板套用)
  20. 一个个人学习的小游戏demo开源

热门文章

  1. 【C#】调用Bartender进行打印
  2. java tcp 断开检测_TCP连接网线断开时的情况测试
  3. 百度搜索引擎压力测试报告
  4. PostgreSQL修炼之道之PostgreSQL的核心架构(十一)
  5. 容积式水表与速度式水表对比
  6. 涨姿势!国外程序员搞副业的 10 大方式
  7. 移动端测试——adb命令
  8. mysql ocp 认证 题库_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  9. 正则表达式 不匹配某个单词
  10. 一个北京24岁女孩的征男友要求!