码迷,mamicode.com
首页 > Windows程序 > 详细

C#对各种文件的操作-xml(3)

时间:2017-08-02 20:24:00      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:c#   字符串   .text   car   方便   led   返回   long   eval   

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using System.Xml.Linq;
  7 using System.Xml;
  8 using System.Xml.Serialization;
  9 using System.IO;
 10 
 11 namespace XMLFileOperator
 12 {
 13     class Program
 14     {
 15 
 16 
 17         static void Main(string[] args)
 18         {
 19             //XmlWriteXMLDocument();       
 20             //XmlReadXMLDocument();         
 21             //XmlSerialization();
 22             //LinqToXmlOperator();
 23            // LinqToXmlOperatorAtString();
 24             
 25         }
 26 
 27         /// <summary>
 28         /// Dom中的XDocument
 29         /// </summary>
 30         public static void XmlWriteXDocument()
 31         {
 32             #region XML写入
 33             //1.创建一个XDocument
 34             //创建一个空文档对象
 35             XDocument document = new XDocument();
 36 
 37             //1.1创建一个文档声明
 38             XDeclaration xDec = new XDeclaration("1.0", "gb2312", "yes");
 39             //定义文档不能通过Add()增加,需要设置Declaration属性
 40             //document.Add(xDec);
 41             document.Declaration = xDec;
 42 
 43             //1.2创建一个根节点
 44             XElement rootElement = new XElement("Order");
 45             //把根节点加到文档中
 46             document.Add(rootElement);
 47 
 48             //1.3增加一个CustomerName节点
 49             XElement cstNameElement = new XElement("CustomerName");
 50             cstNameElement.SetValue("name1");
 51             //把其他节点要加到根节点下
 52             rootElement.Add(cstNameElement);
 53 
 54             //1.4增加一个OrderNumber节点
 55             //通过调用SetElementValue的方式增加一个元素
 56             rootElement.SetElementValue("OrderNumber", "BJ200888");
 57 
 58             //1.5创建一个新对象,Items节点
 59             XElement itemElement = new XElement("Items");
 60             rootElement.Add(itemElement);
 61             //创建3个OrderItem节点
 62             XElement orderItemElement1 = new XElement("OrderItem");
 63             orderItemElement1.SetAttributeValue("Name", "computer");
 64             orderItemElement1.SetAttributeValue("Count", "30");
 65 
 66             XElement orderItemElement2 = new XElement("OrderItem");
 67             orderItemElement2.SetAttributeValue("Name", "teletvision");
 68             orderItemElement2.SetAttributeValue("Count", "2");
 69 
 70             XElement orderItemElement3 = new XElement("OrderItem");
 71             orderItemElement3.SetAttributeValue("Name", "classes");
 72             orderItemElement3.SetAttributeValue("Count", "22");
 73             itemElement.Add(orderItemElement1);
 74             itemElement.Add(orderItemElement2);
 75             itemElement.Add(orderItemElement3);
 76             //把这个空文档对象写入到xml文件中
 77             document.Save("orders.xml");
 78             Console.WriteLine("ok");
 79             Console.ReadKey();
 80             #endregion
 81 
 82             #region XML写入2
 83 
 84             //List<Person> list = new List<Person>()
 85             //{
 86             //    new Person() {Name = "lsx",Age=20,Email="lsx@yahoo.com"},
 87             //    new Person() {Name = "name1",Age=15,Email="name1@yahoo.com"},
 88             //    new Person() {Name = "name2",Age=17,Email="name2@yahoo.com"},
 89             //    new Person() {Name = "name3",Age=19,Email="name3@yahoo.com"},
 90             //    new Person() {Name = "name4",Age=16,Email="name4@yahoo.com"},
 91             //    new Person() {Name = "name5",Age=19,Email="name5@yahoo.com"}
 92             //};
 93 
 94             ////1.创建一个document对象
 95             //XDocument document = new XDocument();
 96 
 97             ////2.设置文档定义
 98             //document.Declaration = new XDeclaration("1.0", "gb2312", "yes");
 99 
100             ////3.增加根节点
101             //XElement rootElement = new XElement("list");
102 
103             ////遍历list集合,有几个元素对象就创建几个子节点
104             //foreach (Person item in list)
105             //{
106             //    XElement personElement = new XElement("Person");
107             //    personElement.SetElementValue("Name", item.Name);
108             //    personElement.SetElementValue("Age", item.Age);
109             //    personElement.SetElementValue("Email", item.Email);
110 
111             //    //把当前的节点PersonElement,加到根节点下
112             //    rootElement.Add(personElement);
113             //}
114 
115             ////为文档增加根节点
116             //document.Add(rootElement);
117 
118             //rootElement.SetAttributeValue("Count", list.Count);
119 
120             ////需要把document这个文档对象写入到文件中
121             //document.Save("../list.xml");
122 
123             //Console.WriteLine("ok");
124 
125             #endregion
126         }
127 
128         /// <summary>
129         /// Dom中的XDocument
130         /// </summary>
131         public static void XmlReadXDocument()
132         {
133             #region  读取list.xml文件
134             //1.创建一个Dom对象
135             XDocument document = XDocument.Load("list.xml");
136             //2.一定要找到根节点
137             XElement rootElement = document.Root;
138 
139             //判断是否有属性
140             Console.WriteLine(rootElement.Name);
141             //调用输出元素属性的方法
142             PrintAttributes(rootElement);
143 
144             //Console.WriteLine(rootElement.Name.ToString());
145             //2.1获取根节点下的所有子节点
146             /*
147              *不传参数,表示获取根节点下的所有的子元素
148              *如果为Elements()方法传递参数,则表示要获取当前节点下的
149              *所有名字为参数中给定的名字的那些子元素
150              */
151             //只要返回类型是IEnumerable接口类型的,无论是泛型还是非泛型的都可以在foreach中遍历
152             foreach (XElement element in rootElement.Elements())
153             {
154                 //这个循环就是遍历根元素下的每个子元素
155                 //Console.WriteLine(element.Name);
156                 Console.WriteLine("节点=================={0}", element.Name);
157                 PrintAttributes(element);
158                 foreach (var subElement in element.Elements())
159                 {
160                     Console.WriteLine("子节点====={0}::{1}", subElement.Name, subElement.Value);
161                     PrintAttributes(subElement);
162                 }
163             }
164             Console.ReadKey();
165             #endregion
166         }
167 
168         /// <summary>
169         /// Dom中的XmlDocument
170         /// </summary>
171         public static void XmlWriteXMLDocument()
172         {
173            //1.创建一个空的XML文档
174             XmlDocument xmlDoc = new XmlDocument();
175 
176            //2.在XML的文档的最头部加入XML的声明段落,即创建一个声明类型的节点                       
177             XmlNode xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
178             xmlDoc.AppendChild(xmlNode);
179 
180            //3.增加注释
181             XmlComment xmlCom = xmlDoc.CreateComment("这是XML文档的注释内容");
182             xmlDoc.AppendChild(xmlCom);
183 
184            //4.为XML文档加入一个元素/加入一个根元素
185             XmlElement xmlelem = xmlDoc.CreateElement("", "Student", "");
186             //XmlText xmlText = xmlDoc.CreateTextNode("Root Text");
187             //xmlelem.AppendChild(xmlText);
188 
189            //5.增加一个属性
190             XmlAttribute xmlAttr = xmlDoc.CreateAttribute("Professional");
191             xmlAttr.Value = "Computer";
192             xmlelem.Attributes.Append(xmlAttr);
193             xmlDoc.AppendChild(xmlelem);
194 
195            //6.增加一个子元素
196             XmlElement xmlelem2 = xmlDoc.CreateElement("Name");
197             XmlText xmltext = xmlDoc.CreateTextNode("name1");
198             xmlelem2.AppendChild(xmltext);
199             xmlelem.AppendChild(xmlelem2);
200 
201             XmlElement xmlelem3 = xmlDoc.CreateElement("Sex");
202             XmlText xmltext2 = xmlDoc.CreateTextNode("Man");
203             xmlelem3.AppendChild(xmltext2);
204             xmlelem.AppendChild(xmlelem3);
205 
206             try
207             {
208                 xmlDoc.Save("test.xml");
209             }
210             catch (Exception ex)
211             {
212                 Console.WriteLine(ex.Message);
213             }
214         }
215 
216         /// <summary>
217         /// Dom中的XmlDocument
218         /// </summary>
219         public static void XmlReadXMLDocument()
220         {
221             //1.加载指定的XML文件
222             XmlDocument xDoc = new XmlDocument();
223             xDoc.Load("test.xml");//4 个重载,4种方式加载Xml
224             //载入XmlTextReader类的对象
225             //XmlTextReader reader = new XmlTextReader("test.xml");
226             //xDoc.Load(reader);
227 
228 
229                 //1: xn 代表一个结点
230                 //2: xn.Name;//这个结点的名称
231                 //3: xn.Value;//这个结点的值
232                 //4: xn.ChildNodes;//这个结点的所有子结点
233                 //5: xn.ParentNode;//这个结点的父结点
234             //2.读取XML的根节点
235             XmlNode xn = xDoc.SelectSingleNode("Student");
236             //3.根据根节点得到所有的子节点
237             XmlNodeList xnl = xn.ChildNodes;
238             
239         }
240 
241 
242         /*
243          * 所谓序列化,其实就是一个过程,一个将对象的状态信息转换为可以存储或者传输的对象,反序列化就是反过程
244          * 由于XML文件是一个开放的标准,用于不同的用户之间进行数据交换,XML序列化的意义比较大
245          * 另外,关于序列化,我们也可以讲对象的状态信息序列化为二进制数据到磁盘,流,内存,网络,,
246          * 还有javascrip序列化的问题,这三种是比价常见的。
247          */
248         /// <summary>
249         /// XML序列化
250         /// </summary>
251         public static void XmlSerialization()
252         {
253             #region 对象序列化
254             List<PersonClass> li = new List<PersonClass>();
255             li.Add(new PersonClass() { Name = "wuxinlong", Age = 18, Email = "wuxinlong@163.com" });
256             li.Add(new PersonClass() { Name = "Jafh", Age = 14, Email = "Jafh@163.com" });
257             li.Add(new PersonClass() { Name = "hasdf", Age = 35, Email = "hasdf@163.com" });
258             //使用XML序列化对象
259             XmlSerializer xmlSerializer = new XmlSerializer(li.GetType()/*typeof(list<PersonClass>)*/);
260             //创建一个文件流,序列化时需要将该流的数据序列化为xml文件
261             //xmlSerializer.Serialize(Stream,object);
262 
263             using (FileStream fsWrite = File.OpenWrite("li.xml"))
264             {
265                 xmlSerializer.Serialize(fsWrite, li);
266                 //xmlSerializer.Deserialize(fsWrite);
267             }
268             Console.WriteLine("ok");
269             Console.ReadKey();
270             #endregion
271             
272         }
273 
274         //LinqToXML是Linq系列中的一个主题,Linq用来操作内存数据比较方便简单,代码量比较少
275         //在操作XML文件的时候类似数据的增删改查
276         public static void LinqToXmlOperator()
277         {
278             #region 创建XML文档 格式固定
279             XDocument inventDoc =
280                 new XDocument(
281                     new XDeclaration("1.0", "utf-8", "yes"),
282                     new XComment("这是一份用Linq创建的XML文档"),
283                     new XProcessingInstruction("xml-stylesheet",
284                         "href=‘MyStyles.css‘ title=‘Compact‘ type=‘text/css‘"),
285                     new XElement("Invent",
286                       new XElement("car", new XAttribute("ID", "1"),
287                         new XElement("Color", "Green"),
288                         new XElement("Mark", "BMW"),
289                         new XElement("PetName", "Stan")
290                         ),
291                       new XElement("car", new XAttribute("ID", "2"),
292                         new XElement("Color", "Pink"),
293                         new XElement("Mark", "Yugo"),
294                         new XElement("PetName", "Melvin")
295                         )
296                       )
297                     );
298             //保存
299             inventDoc.Save("inventDoc.xml");
300             #endregion            
301         }
302 
303         /// <summary>
304         /// 通过数组生成XML文档
305         /// </summary>
306         public static void LinqToXmlOperatorAtArray()
307         {
308             #region 从数组和容器中生成文档
309             //实际意义比较大,因为我们在实际中获取数据绝大多数方式是通过数组,ADO.NET,对象和文件获取的
310             //创建匿名类型的数组
311             var people = new[]
312             {
313                 new {FirstName="Mandy",Age=32},
314                 new {FirstName="wuxinlong",Age=18},
315                 new {FirstName="Moto",Age=15},
316                 new {FirstName="Jack",Age=40},
317                 new {FirstName="Marry",Age=22},
318             };
319 
320             var arrayDataAsXElements = from c in people
321                                        select
322                                            new XElement("Person",
323                                                new XAttribute("Age", c.Age),
324                                                new XAttribute("FirstName", c.FirstName)
325                                                );
326             XElement peopleDoc = new XElement("People", arrayDataAsXElements);
327             peopleDoc.Save("People.xml");
328             Console.WriteLine(peopleDoc);
329             Console.ReadKey();
330             #endregion
331         }
332 
333         //通过字符串生成XML,对字符串的要求比较严格
334         public static void LinqToXmlOperatorAtString()
335         {
336             string myElement =
337                 @"<Car ID=‘3‘>
338                 <Color>Bule</Color>
339                 <Make>Yugo</Make>
340                 </Car>";
341             XElement newElement = XElement.Parse(myElement);
342             newElement.Save("newElement.xml");
343             Console.WriteLine(newElement);
344             Console.ReadKey();
345         }
346 
347         private static void PrintAttributes(XElement rootElement)
348         {
349             Console.WriteLine(rootElement.Name + "元素的属性:");
350             foreach (XAttribute attr in rootElement.Attributes())
351             {
352                 Console.WriteLine(attr.Name + "  " + attr.Value);
353             }
354         }
355     }
356 
357     public class Person
358     {
359         public string Name { get; set; }
360         public int Age { get; set; }
361         public string Email { get; set; }
362     }
363 
364     //创建一个对象,用来进行序列化操作
365     //注意xml序列化只能序列化公共字段和属性
366     //而且对象也必须是公共类型
367     public class PersonClass
368     {
369         public string Name { get; set; }
370         public int Age { get; set; }
371         public string Email { get; set; }
372         public void SayHi()
373         {
374             Console.WriteLine("Hi,MyName is:{0}",Name);
375         }
376         public void SayHello()
377         {
378             Console.WriteLine("Hello");
379         }
380     }
381 }

 

C#对各种文件的操作-xml(3)

标签:c#   字符串   .text   car   方便   led   返回   long   eval   

原文地址:http://www.cnblogs.com/Derrickwu/p/7249214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!