海纳百川,有容乃大
善于总结,积累软财富

【标题.NET操作XML文件:XML文件节点的增删改

【准备】
   1、创建一个Web 窗体
   2、创建一个xml文件 joyo_bookstore.xml
 
【源码示例】
 A、joyo_bookstore.xml 文件  
    
1<?xml version="1.0" encoding="gb2312"?>
2<bookstore>
3  <book genre="david" ISBN="2-3631-5">
4    <title>david-blogs life</title>
5    <author>david</author>
6    <price>58.3</price>
7  </book> 
8</bookstore>


B、C#源代码(在Web 窗体中添加三个Button)
  1 #region 生产XmlDocument对象
  2         protected XmlDocument createXmlDoc()
  3         {
  4             XmlDocument xmldoc=new XmlDocument ();
  5             xmldoc.Load ("D:\\work\\woall_last\\Test\\xml\\joyo_bookstore.xml");
  6             
  7             return xmldoc;
  8         }
  9 
 10         #endregion 
 11 
 12         #region 添加XML文件节点
 13         private void Button1_Click(object sender, System.EventArgs e)
 14         {
 15             XmlDocument xmldoc = createXmlDoc();
 16 
 17             /*===============函数原型======================================
 18              * public System.Xml.XmlNode SelectSingleNode(string xpath)
 19                 System.Xml.XmlNode 的成员
 20                 摘要:
 21                 选择匹配 XPath 表达式的第一个 XmlNode。
 22                 参数:
 23                 xpath: XPath 表达式。 
 24                 返回值:
 25                 与 XPath 查询匹配的第一个 XmlNode;如果未找到任何匹配节点,则为null。
 26              * 不应该要求将 XmlNode “实时”连接到 XML 文档。
 27              * 也就是说,XML 文档中的更改不会出现在 XmlNode 中,反之亦然。
 28             
 29             =======================================================*/
 30 
 31             //获得根节点
 32             XmlNode root = xmldoc.SelectSingleNode("bookstore");
 33 
 34             
 35             /*================函数原型=============================
 36              * public System.Xml.XmlElement CreateElement(string name)
 37                 System.Xml.XmlDocument 的成员
 38                 摘要:
 39                 创建具有指定名称的元素。
 40 
 41                 参数:
 42                 name: 元素的限定名。如果名称包含冒号,
 43              * 则 System.Xml.XmlNode.Prefix 属性反映名称中位于冒号之前的部分,
 44              * System.Xml.XmlDocument.LocalName 属性反映名称中位于冒号之后的部分。
 45              * 限定名不能包含“xmlns”前缀。 
 46                 返回值:
 47                 新的 XmlElement。
 48             ================================================*/
 49             //创建一个<book>节点
 50             XmlElement xe1 = xmldoc.CreateElement("book");
 51             
 52             //设置该节点genre属性
 53             xe1.SetAttribute("genre""AXzhz");
 54             //设置该节点ISBN属性
 55             xe1.SetAttribute("ISBN""2-3631-4");
 56  
 57             XmlElement xesub1 = xmldoc.CreateElement("title");
 58             //设置文本节点
 59             xesub1.InnerText = "AXzhz-blogs life";
 60 
 61             //添加到<book>节点中
 62             xe1.AppendChild(xesub1);
 63  
 64             XmlElement xesub2 = xmldoc.CreateElement("author"); 
 65             xesub2.InnerText = "AXzhz"
 66             xe1.AppendChild(xesub2);
 67  
 68             XmlElement xesub3 = xmldoc.CreateElement("price"); 
 69             xesub3.InnerText = "58.3";
 70             xe1.AppendChild(xesub3);
 71             
 72             //添加到根节点<bookstore>中
 73             root.AppendChild(xe1);
 74  
 75             xmldoc.Save("D:\\work\\woall_last\\Test\\xml\\joyo_bookstore.xml");
 76         }
 77         #endregion 
 78 
 79         #region 删除XML文件中的节点属性或节点
 80         private void Button2_Click(object sender, System.EventArgs e)
 81         {
 82             XmlDocument xmldoc= createXmlDoc();
 83             
 84             //获得bookstore的所有根节点并遍历
 85             XmlNodeList xnl = xmldoc.SelectSingleNode("bookstore").ChildNodes; 
 86             foreach (XmlNode xn in xnl)
 87             { 
 88                 XmlElement xe = (XmlElement)xn;
 89  
 90                 if (xe.GetAttribute("genre"== "david")
 91                 {
 92                     //删除genre属性
 93                     xe.RemoveAttribute("genre");
 94  
 95                 } 
 96                 else if(xe.GetAttribute("genre"== "update david")
 97                 {
 98                     //删除该节点的全部内容
 99                     //注意:这xe是XmlElement对象,它的方法RemoveAll移除节点的所有指定属性和子节点,不移除默认属性
100                     xe.RemoveAll();                    
101                 }
102  
103             } 
104             xmldoc.Save("D:\\work\\woall_last\\Test\\xml\\joyo_bookstore.xml");
105         }
106         #endregion 
107 
108         #region 修改XML文件的节点:修改book节点的genre属性由david到update david , book子节点author由david到david weihw 
109         private void Button3_Click(object sender, System.EventArgs e)
110         {
111             XmlDocument xmldoc=createXmlDoc();
112             
113             //获取bookstore节点的所有子节点
114             XmlNodeList nodeList = xmldoc.SelectSingleNode("bookstore").ChildNodes;
115 
116             //遍历所有子节点
117             foreach (XmlNode xn in nodeList)
118             {
119                 //将子节点类型转换为XmlElement类型
120                 XmlElement xe = (XmlElement)xn;
121  
122                 if (xe.GetAttribute("genre"== "david")
123                 {
124                     //修改book节点的genre属性
125                     xe.SetAttribute("genre""update david");
126  
127                     //取xe子节点(xe为book节点)的所有子节点
128                     XmlNodeList nls = xe.ChildNodes;
129  
130                     foreach (XmlNode xn1 in nls)
131                     {
132  
133                         XmlElement xe2 = (XmlElement)xn1;
134  
135                         if (xe2.Name == "author")
136                         {
137                             //修改book子节点author由david到david weihw 
138                             xe2.InnerText = "david weihw"
139                             break
140                         }
141  
142                     } 
143                     break
144                 }
145  
146             } 
147             xmldoc.Save("D:\\work\\woall_last\\Test\\xml\\joyo_bookstore.xml");
148             
149         }
150         #endregion 

【执行结果】
 
 1、执行Button1_Click方法后,joyo_bookstore.xml文件为

 1<?xml version="1.0" encoding="gb2312"?>
 2<bookstore>
 3  <book genre="david" ISBN="2-3631-5">
 4    <title>david-blogs life</title>
 5    <author>david</author>
 6    <price>58.3</price>
 7  </book>
 8  <book genre="AXzhz" ISBN="2-3631-4">
 9    <title>AXzhz-blogs life</title>
10    <author>AXzhz</author>
11    <price>58.3</price>
12  </book>
13</bookstore>

2、执行Button3_Click方法后,joyo_bookstore.xml文件为

 1 <?xml version="1.0" encoding="gb2312"?>
 2 <bookstore>
 3   <book genre="update david" ISBN="2-3631-5">
 4     <title>david-blogs life</title>
 5     <author>david weihw</author>
 6     <price>58.3</price>
 7   </book>
 8   <book genre="AXzhz" ISBN="2-3631-4">
 9     <title>AXzhz-blogs life</title>
10     <author>AXzhz</author>
11     <price>58.3</price>
12   </book>
13 </bookstore>

3、执行Button2_Click方法后,joyo_bookstore.xml文件为
 1 <?xml version="1.0" encoding="gb2312"?>
 2 <bookstore>
 3   <book>
 4   </book>
 5   <book genre="AXzhz" ISBN="2-3631-4">
 6     <title>AXzhz-blogs life</title>
 7     <author>AXzhz</author>
 8     <price>58.3</price>
 9   </book>
10 </bookstore>

【总结】
            1、在XmlDocument.Load方法中,可以使用物理绝对路径D:\\work\\woall_last\\Test\\xml\\joyo_bookstore.xml
                  或使用URL格式地址,比如http://test.fenlei.cn/Test/xml/joyo_bookstore.xml
               
                   如果直接使用相对路径joyo_bookstore.xml,会发生异常:

未能找到文件“c:\windows\system32\inetsrv\joyo_bookstore.xml”。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.IO.FileNotFoundException: 未能找到文件“c:\windows\system32\inetsrv\joyo_bookstore.xml”。


         2、对象XmlElement 和XmlNode 的RemoveAll只能移除节点的属性与所有子节点。

        3、在实际的开发过程中,可以把上述的方法封装成操作XML的类,实现代码的复用。


【关键字】.NET  XML 文件操作 XML文件节点的增加 删除 修改

posted on 2007-02-25 18:16  海纳百川  阅读(3194)  评论(6编辑  收藏  举报

首页原创.NET区 div1
.NET新手区 div2
精华区 div3
专家区 div4
读书心得区 div5
百度主题实验室
百度主题推广 div7

-->