C#操作XML文档总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#操作XML文档总结相关的知识,希望对你有一定的参考价值。
包括XMLWriter写入,XmlReader读取,XmlDocument操作,DataSet.ReadXML(),DataSet.WriteXML(),LINQ查询XML
1.XMLWriter写入XML数据
结果会覆盖原文档。
c#_code:
//使用XMLWriter写XML数据 XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; //缩进 //settings.NewLineOnAttributes = true; //属性换新的一行 XmlWriter writer = XmlWriter.Create("Books.xml", settings);//创建XmlWriter实例 writer.WriteStartDocument();//XML文档声明 writer.WriteStartElement("book"); //开始标记 1 writer.WriteAttributeString("Type","科幻");//添加属性 writer.WriteAttributeString("ISBN", "001-001-001");//添加属性 writer.WriteElementString("title", "名侦探柯南");//添加元素 writer.WriteElementString("price", "99.99");//添加元素 writer.WriteStartElement("author");//开始标记 2 writer.WriteElementString("name", "谁谁谁");//添加元素 writer.WriteEndElement();//结束标记 2 writer.WriteEndElement();//结束标记 1 writer.WriteEndDocument(); //关闭所有文档标记 writer.Flush(); //刷新流 writer.Close(); //关闭流
结果如下:
<?xml version="1.0" encoding="utf-8"?> <book Type="科幻" ISBN="001-001-001"> <title>名侦探柯南</title> <price>99.99</price> <author> <name>谁谁谁</name> </author> </book>
2.XMLReader读取XML数据
xml_data:
<?xml version="1.0" encoding="utf-8"?> <book Type="科幻" ISBN="001-001-001"> <title>哈利波特</title> <price>99.99</price> <author> <name>JK罗琳</name> </author> </book> <book Type="青春" ISBN="001-001-002"> <title>左耳</title> <price>9.99</price> <author> <name>饶雪漫</name> </author> </book> <book Type="悬疑" ISBN="001-001-003"> <title>盗墓笔记</title> <price>99.99</price> <author> <name>南派三叔</name> </author> </book>
c#_code:
此处待续。。。。
3.XmlDocument操作XML
(1)插入节点,在原文档下追加,原文档必须要有根元素 <Books></Books>。
c#_code:
XmlDocument doc = new XmlDocument(); doc.Load("D:\\Books.xml");//加载XML文档,文件必须存在且有根元素 //创建一个节点 XmlElement newbook = doc.CreateElement("book"); //设置属性 newbook.SetAttribute("type", "story"); newbook.SetAttribute("publishdate", "1993"); newbook.SetAttribute("ISBN", "002-123-321"); //设置元素 XmlElement name = doc.CreateElement("Name"); name.InnerText = "I have a Dream"; newbook.AppendChild(name); XmlElement price = doc.CreateElement("Price"); price.InnerText = "9.99"; newbook.AppendChild(price); //添加到节点 doc.DocumentElement.AppendChild(newbook); //写入磁盘(追加) XmlTextWriter tr = new XmlTextWriter("D:\\Books.xml", null); tr.Formatting = Formatting.Indented;//设置缩进格式 doc.WriteContentTo(tr);//保存 写入 tr.Close();
结果如下:
<?xml version="1.0" encoding="utf-8"?> <Books> <book type="story" publishdate="1993" ISBN="002-123-321"> <Name>I have a Dream</Name> <Price>9.99</Price> </book> </Books>
(2)XmlDocument读取某个节点的元素
xml_data:
<?xml version="1.0" encoding="utf-8"?> <bookstore> <book Type="科幻" ISBN="001-001-001"> <title>哈利波特</title> <price>99.99</price> <author> <name>JK罗琳</name> </author> </book> <book Type="青春" ISBN="001-001-002"> <title>左耳</title> <price>9.99</price> <author> <name>饶雪漫</name> </author> </book> <book Type="悬疑" ISBN="001-001-003"> <title>盗墓笔记</title> <price>99.99</price> <author> <name>南派三叔</name> </author> </book> </bookstore>
c#_code:
XmlDocument doc = new XmlDocument(); doc.Load("D:\\Books.xml"); //输出所有节点为Name的元素 //1. XmlNodeList nodelist = doc.GetElementsByTagName("title"); //2.使用XPath语法从文档中检索一组节点 //XmlNodeList nodelist = doc.SelectNodes("/bookstore/book/title"); foreach (XmlNode node in nodelist) { richTextBox1.AppendText(node.InnerXml + "\r\n"); }
读取结果:
哈利波特
左耳
盗墓笔记
(2)XMLDocument获取指定节点的元素
4.XML文档与ADO.NET对象相互转换
适用于版本.NET3.0以上
using System.Data; using System.Xml; using System.Data.SqlClient; using System.Xml.Linq; string connString = "server=服务器名;database=数据库;uid=账户;pwd=密码"; ///ADO.NET数据转换XML文档 //1:创建一个ADO.NET对象,生成一个DataSet对象 SqlConnection conn = new SqlConnection(connString); SqlDataAdapter dataAdapter1 = new SqlDataAdapter("select Barcode from Books", conn); DataSet dataSet1 = new DataSet(); dataAdapter1.Fill(dataSet1, "BooksBarCode"); //2:把XML文档存到磁盘中(覆盖数据) string file = @"C:\Users\WIN20150720\Desktop\Books.xml"; dataSet1.WriteXml(file); ///XML文档转换ADO.NET数据 //1:创建DataSet对象 DataSet dataSet2 = new DataSet(); //2:读取XML文档 dataSet2.ReadXml(file); //3:绑定到网格 dataGridView1.DataSource = dataSet2.Tables[0]; ///SQL从数据库查询 //根据BarCode获取全部信息 string barcode = ""; foreach (DataRow dr in dataSet2.Tables[0].Rows) { barcode += dr["Barcode"].ToString() + ","; } barcode = barcode.Substring(0, barcode.LastIndexOf(",")); string sql = string.Format("Select * from Books where BarCode in({0})", barcode); SqlDataAdapter dataAdapter2 = new SqlDataAdapter(sql, conn); DataSet dataSet3 = new DataSet(); dataAdapter2.Fill(dataSet3, "BooksInfo"); string file2 = @"C:\Users\WIN20150720\Desktop\AllBooks.xml"; dataSet3.WriteXml(file2);
5.LINQ从XML文档查询
(1)
data_xml:
<?xml version="1.0" encoding="utf-8" ?> <Data> <Products> <Product Name="West Side Story" Price="9.99m" SuppelierID="1"/> <Product Name="Assassins" Price="14.99m" SuppelierID="2"/> <Product Name="Frogs" Price="13.99m" SuppelierID="1"/> <Product Name="Sweeney Todd" Price="9.99m" SuppelierID="3"/> </Products> <Suppliers> <Supplier Name="Solely Sondheim" SupplierID="1"/> <Supplier Name="CD-by-CD-by-Sondheim" SupplierID="2"/> <Supplier Name="Barbershop CDs" SupplierID="3"/> </Suppliers> </Data>
应用:
using System.Xml.Linq; namespace ConsoleApplication1 { class XML_LINQ { static void Main() { //将产品和供货商连接起来,价格高于10美元,先按供货商名排序,在按产品名排序,最后打印供货商名和产品名 //供货商和产品编码使用XML文件 XDocument doc = XDocument.Load("data.xml"); //XDocument使用命名空间System.Xml.Linq; var filtered = from p in doc.Descendants("Product") join s in doc.Descendants("Supplier") on (int)p.Attribute("SupplierID") equals (int)s.Attribute("SupplierID") where (decimal)p.Attribute("Price") > 10 orderby (string)s.Attribute("Name"), (string)p.Attribute("Name") select new { SupplierName = (string)s.Attribute("Name"), ProductName = (string)s.Attribute("Name") }; foreach (var v in filtered) { Console.WriteLine("Supplier={0};Product={1}", v.SupplierName, v.ProductName); } } } }
(2)
xml_data: D:\\Books.xml
<?xml version="1.0" encoding="utf-8"?> <bookstore> <book Type="科幻" ISBN="001-001-001"> <title>哈利波特</title> <price>99.99</price> <author> <name>JK罗琳</name> </author> </book> <book Type="青春" ISBN="001-001-002"> <title>左耳</title> <price>9.99</price> <author> <name>饶雪漫</name> </author> </book> <book Type="悬疑" ISBN="001-001-003"> <title>盗墓笔记</title> <price>99.99</price> <author> <name>南派三叔</name> </author> </book> </bookstore>
应用1:根据书名查找价格和作者
//根据书名查找价格和作者
XDocument doc = XDocument.Load("D:\\Books.xml"); var query = from p in doc.Element("bookstore").Elements("book") where (string)p.Element("title") == "左耳" select p; query.ToList().ForEach(item => { decimal price = (decimal)item.Element("price"); string author = item.Element("author").Value; });
结果:price=9.99 author=饶雪漫
应用2:查找所有的书名
//查找所有的书名 XDocument xdoc = XDocument.Load("D:\\Books.xml"); var query = from title in xdoc.Descendants("title") select title.Value; foreach (var item in query) { richTextBox1.AppendText(item + "\r\n"); }
结果: 哈利波特
左耳
盗墓笔记
以上是关于C#操作XML文档总结的主要内容,如果未能解决你的问题,请参考以下文章