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         }

 

 

 

 

 

posted @ 2012-10-06 14:40  丛林听雨  阅读(284)  评论(0编辑  收藏  举报