.net操纵xml文件类(c#)_asp.net技巧1(转)
1using System; 2using System.Xml; 3using System.Web; 4namespace solucky 5{ 6 /**//// <summary> 7 /// 必需用XPATH表达式来获取相应节点 8 /// 关于xpath可以参见: 9 /// </summary> 10 public class MyXml 11 { 12 变量#region 变量 13 /**//// <summary> 14 /// xml文件所在路径类型 15 /// </summary> 16 /// <remarks>xml文件所在路径类型</remarks> 17 public enum enumXmlPathType 18 { 19 /**//// <summary> 20 /// 绝对路径 21 /// </summary> 22 AbsolutePath, 23 /**//// <summary> 24 /// 虚拟路径 25 /// </summary> 26 VirtualPath 27 } 28 29 private string xmlFilePath ; 30 private enumXmlPathType xmlFilePathType ; 31 private XmlDocument xmlDoc = new XmlDocument() ; 32 #endregion 33 34 35 属性#region 属性 36 /**//// <summary> 37 /// 文件路径 38 /// </summary> 39 /// <remarks>文件路径</remarks> 40 public string XmlFilePath 41 { 42 get 43 { 44 return this.xmlFilePath; 45 } 46 set 47 { 48 xmlFilePath = value ; 49 50 } 51 } 52 53 /**//// <summary> 54 /// 文件路径类型 55 /// </summary> 56 public enumXmlPathType XmlFilePathTyp 57 { 58 set 59 { 60 xmlFilePathType = value ; 61 } 62 } 63 #endregion 64 65 构造函数#region 构造函数 66 /**//// <summary> 67 /// 68 /// </summary> 69 /// <param name="tempXmlFilePath"></param> 70 public MyXml( string tempXmlFilePath ) 71 { 72 // 73 // TODO: 在此处添加构造函数逻辑 74 // 75 76 this.xmlFilePathType = enumXmlPathType.VirtualPath ; 77 this.xmlFilePath = tempXmlFilePath ; 78 GetXmlDocument() ; 79 //xmlDoc.Load( xmlFilePath ) ; 80 } 81 82 /**//// <summary> 83 /// 构造函数 84 /// </summary> 85 /// <param name="tempXmlFilePath">文件路径</param> 86 /// <param name="tempXmlFilePathType">类型</param> 87 public MyXml( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType ) 88 { 89 // 90 // TODO: 在此处添加构造函数逻辑 91 // 92 this.xmlFilePathType = tempXmlFilePathType ; 93 this.xmlFilePath = tempXmlFilePath ; 94 GetXmlDocument() ; 95 } 96 #endregion 97 98 99 /**////<summary> 100 ///获取XmlDocument实体类 101 ///</summary> 102 /// <returns>指定的XML描述文件的一个xmldocument实例</returns> 103 private XmlDocument GetXmlDocument() 104 { 105 XmlDocument doc=null; 106 107 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath ) 108 { 109 doc = GetXmlDocumentFromFile( xmlFilePath ) ; 110 } 111 else if( this.xmlFilePathType == enumXmlPathType.VirtualPath ) 112 { 113 doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath)) ; 114 } 115 return doc; 116 } 117 118 private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath) 119 { 120 string xmlFileFullPath = tempXmlFilePath ; 121 xmlDoc.Load(xmlFileFullPath) ; 122 //定义事件处理 123 xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent); 124 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent); 125 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent); 126 return xmlDoc ; 127 } 128 129 读取指定节点的指定属性值#region 读取指定节点的指定属性值 130 /**//// <summary> 131 /// 功能: 132 /// 读取指定节点的指定属性值 133 /// </summary> 134 /// <param name="strNode">节点名称</param> 135 /// <param name="strAttribute">此节点的属性</param> 136 /// <returns></returns> 137 public string GetXmlNodeAttributeValue(string strNode,string strAttribute) 138 { 139 string strReturn = ""; 140 try 141 { 142 //根据指定路径获取节点 143 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ; 144 if (!(xmlNode==null)) 145 {//获取节点的属性,并循环取出需要的属性值 146 XmlAttributeCollection xmlAttr = xmlNode.Attributes ; 147 148 for(int i=0 ;i<xmlAttr.Count; i++) 149 { 150 if (xmlAttr.Item(i).Name == strAttribute) 151 { 152 strReturn = xmlAttr.Item(i).Value ; 153 break; 154 } 155 } 156 } 157 } 158 catch(XmlException xmle) 159 { 160 throw xmle ; 161 } 162 return strReturn ; 163 } 164 #endregion 165 166 167 读取指定节点的值#region 读取指定节点的值 168 /**//// <summary> 169 /// 功能: 170 /// 读取指定节点的值 171 /// </summary> 172 /// <param name="strNode">节点名称</param> 173 /// <returns></returns> 174 public string GetXmlNodeValue(string strNode) 175 { 176 string strReturn = String.Empty ; 177 178 try 179 { 180 //根据路径获取节点 181 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ; 182 if (!(xmlNode==null)) 183 strReturn = xmlNode.InnerText ; 184 } 185 catch(XmlException xmle) 186 { 187 throw xmle ; 188 } 189 return strReturn ; 190 } 191 #endregion 192 193 设置节点值#region 设置节点值 194 /**//// <summary> 195 /// 功能: 196 /// 设置节点值 197 /// </summary> 198 /// <param name="strNode">节点的名称</param> 199 /// <param name="newValue">节点值</param> 200 public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue) 201 { 202 try 203 { 204 //可以批量为符合条件的节点进行付值 205 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath); 206 if (!(xmlNode==null)) 207 { 208 foreach(XmlNode xn in xmlNode) 209 { 210 xn.InnerText = xmlNodeValue ; 211 } 212 } 213 /**//* 214 * 根据指定路径获取节点 215 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ; 216 //设置节点值 217 if (!(xmlNode==null)) 218 xmlNode.InnerText = xmlNodeValue ;*/ 219 } 220 catch(XmlException xmle) 221 { 222 throw xmle ; 223 } 224 } 225 #endregion 226 227 设置节点的属性值#region 设置节点的属性值 228 /**//// <summary> 229 /// 功能: 230 /// 设置节点的属性值 231 /// </summary> 232 /// <param name="xmlNodePath">节点名称</param> 233 /// <param name="xmlNodeAttribute">属性名称</param> 234 /// <param name="xmlNodeAttributeValue">属性值</param> 235 public void SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue) 236 { 237 try 238 { 239 //可以批量为符合条件的节点的属性付值 240 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath); 241 if (!(xmlNode==null)) 242 { 243 foreach(XmlNode xn in xmlNode) 244 { 245 XmlAttributeCollection xmlAttr = xn.Attributes ; 246 for(int i=0 ; i<xmlAttr.Count ; i++) 247 { 248 if ( xmlAttr.Item(i).Name == xmlNodeAttribute ) 249 { 250 xmlAttr.Item(i).Value = xmlNodeAttributeValue; 251 break ; 252 } 253 } 254 } 255 } 256 /**//*单个节点 257 //根据指定路径获取节点 258 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ; 259 if (!(xmlNode==null)) 260 {//获取节点的属性,并循环取出需要的属性值 261 XmlAttributeCollection xmlAttr = xmlNode.Attributes ; 262 for(int i=0 ; i<xmlAttr.Count ; i++) 263 { 264 if ( xmlAttr.Item(i).Name == xmlNodeAttribute ) 265 { 266 xmlAttr.Item(i).Value = xmlNodeAttributeValue; 267 break ; 268 } 269 } 270 } 271 */ 272 } 273 catch(XmlException xmle) 274 { 275 throw xmle ; 276 } 277 } 278 #endregion 279 280 添加#region 添加 281 /**//// <summary> 282 /// 获取XML文件的根元素 283 /// </summary> 284 public XmlNode GetXmlRoot() 285 { 286 return xmlDoc.DocumentElement ; 287 } 288 289 /**//// <summary> 290 /// 在根节点下添加父节点 291 /// </summary> 292 public void AddParentNode(string parentNode) 293 { 294 try 295 { 296 XmlNode root = GetXmlRoot() ; 297 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode) ; 298 root.AppendChild(parentXmlNode) ; 299 } 300 catch(XmlException xmle) 301 { 302 throw xmle ; 303 } 304 } 305