C#对XML文档读写操作
写入文档:
1 static void Main(string[] args) 2 { 3 XmlDocument doc = new XmlDocument();//实例化文档对象 4 5 if (File.Exists("student.xml"))//如果文件已存在,载入文档 6 { 7 doc.Load("student.xml"); 8 } 9 else//否则 10 { 11 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8","yes");//设置声明 12 doc.AppendChild(dec); 13 14 XmlElement root = doc.CreateElement("root");//加入根节点 15 doc.AppendChild(root); 16 } 17 18 XmlElement student = doc.CreateElement("student");//插入一个student节点 19 student.SetAttribute("id", "120");//设置id属性 20 student.SetAttribute("age", "22");//设置age属性 21 student.InnerText = "张三";//设置中间文本 22 23 doc.DocumentElement.AppendChild(student);//将student节点连接在根节点上 24 25 doc.Save("student.xml");//保存文档 26 }
执行3次后产生的xml文档:
1 <?xml version="1.0" encoding="utf-8" standalone="yes"?> 2 <root> 3 <student id="120" age="22">张三</student> 4 <student id="120" age="22">张三</student> 5 <student id="120" age="22">张三</student> 6 </root>
使用XmlTextReader从头到尾阅读xml文档,比较适合大量数据读取
1 static void Main(string[] args) 2 { 3 XmlTextReader reader; 4 5 if (File.Exists("student.xml"))//如果文件已存在,载入文档 6 { 7 reader = new XmlTextReader("student.xml"); 8 } 9 else//否则 10 { 11 return; 12 } 13 14 int count = 0; 15 while (reader.Read())//阅读下一个 16 { 17 if (reader.Name == "student") 18 { 19 //显示读取的属性和中间文本 20 Console.WriteLine(reader.GetAttribute("id") + " " + reader.GetAttribute("age") + " " + reader.ReadString()); 21 count++; 22 } 23 } 24 reader.Close();//关闭阅读器 25 Console.WriteLine("Count is " + count); 26 Console.ReadKey(); 27 }
当然也可以用xmlDocument进行结构化读取,但是读取前系统会把整个文档的结构获取进来
1 static void Main(string[] args) 2 { 3 XmlDocument doc = new XmlDocument(); 4 5 if (File.Exists("student.xml"))//如果文件已存在,载入文档 6 { 7 doc.Load("student.xml"); 8 } 9 else//否则 10 { 11 Console.WriteLine("文档不存在!"); 12 Console.ReadKey(); 13 return; 14 } 15 16 XmlNodeList list = doc.DocumentElement.SelectNodes("student");//读取根节点的所有子节点,放到XmlNodeList中 17 18 foreach (XmlNode node in list)//从list中遍历所有节点 19 { 20 XmlElement ele = (XmlElement)node;//节点可以有中间文本但是没有属性值,所以要先转成element才能读出属性值 21 Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//读取数据/显示 22 } 23 24 Console.ReadKey(); 25 }