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


【标题 .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的类,实现代码的复用。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值