本文主要是介绍C#中读取XML文件的四种常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧...
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)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其javascript它的一些属性.例如:
- 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节点的属性值 striChina编程ng 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"; x编程elKey.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); http://www.chinasem.cn //另一种方法 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(@"testphp.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") == 1 select 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") == 1 select 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文件的四种常用方法的文章就介绍到这了,更多相关C#读取XML内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于C#中读取XML文件的四种常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!