1
using
System;
2
using
System.Xml;
3
using
System.Web;
4
5
/**/
/// <summary> 6/// XML核心类: 7/// 必需用XPath表达式来获取相应节点 8/// </summary>
9
public
class
XmlCore
10
{ 11 变量-----------------------------------------------------------#region 变量----------------------------------------------------------- 12 13 14 private string xmlFilePath; 15 private XmlDocument xmlDoc = new XmlDocument(); 16 #endregion 17 18 属性-----------------------------------------------------------#region 属性----------------------------------------------------------- 19 /**//// <summary> 20 /// 文件路径 21 /// </summary> 22 /// <remarks>文件路径</remarks> 23 public string XmlFilePath 24 { 25 get 26 { 27 return this.xmlFilePath; 28 } 29 set 30 { 31 xmlFilePath = value; 32 33 } 34 } 35 36 #endregion 37 38 构造函数-------------------------------------------------------#region 构造函数------------------------------------------------------- 39 /**//// <summary> 40 /// 构造函数 41 /// </summary> 42 /// <param name="tempXmlFilePath">已有的文件的路径</param> 43 public XmlCore(string tempXmlFilePath) 44 { 45 this.xmlFilePath = tempXmlFilePath; 46 GetXmlDocument(); 47 } 48 49 /**//// <summary> 50 /// 构造函数 51 /// </summary> 52 /// <param name="NewXmlFilePath">将要新建的文件路径</param> 53 /// <param name="RootNodeName">根节点名称</param> 54 public XmlCore(string NewXmlFilePath, string RootNodeName) 55 { 56 CreateNewXmlFile(NewXmlFilePath, RootNodeName); 57 this.xmlFilePath = NewXmlFilePath; 58 GetXmlDocument(); 59 } 60 61 /**////<summary> 62 ///获取XmlDocument实体类 63 ///</summary> 64 /// <returns>指定的XML描述文件的一个xmldocument实例</returns> 65 private XmlDocument GetXmlDocument() 66 { 67 XmlDocument doc = null; 68 69 doc = GetXmlDocumentFromFile(xmlFilePath); 70 71 return doc; 72 } 73 74 private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath) 75 { 76 string xmlFileFullPath = tempXmlFilePath; 77 xmlDoc.Load(xmlFileFullPath); 78 //定义事件处理 79 xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent); 80 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent); 81 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent); 82 return xmlDoc; 83 } 84 85 private void CreateNewXmlFile(string filePath, string rootNode) 86 { 87 XmlTextWriter xtw = new XmlTextWriter(filePath, System.Text.Encoding.UTF8); 88 xtw.Formatting = Formatting.Indented; 89 xtw.WriteStartDocument(false); 90 xtw.WriteStartElement(rootNode); 91 xtw.WriteEndElement(); 92 xtw.Flush(); 93 xtw.Close(); 94 } 95 96 #endregion 97 98 获取所有指定名称的节点#region 获取所有指定名称的节点 99 /**//// <summary>100 /// 功能:101 /// 获取所有指定名称的节点(XmlNodeList)102 /// </summary>103 /// <param >节点名称</param>104 public XmlNodeList GetXmlNodeList(string strNode)105 {106 XmlNodeList strReturn = null;107 try108 {109 //根据指定路径获取节点110 XmlNodeList xmlNode = xmlDoc.SelectNodes(strNode);111 if (!(xmlNode == null))112 {113 strReturn = xmlNode;114 }115 }116 catch (XmlException xmle)117 {118 throw xmle;119 }120 return strReturn;121 }122 #endregion123124 读取指定节点的指定属性值---------------------------------------#region 读取指定节点的指定属性值---------------------------------------125 /**//// <summary>126 /// 功能:127 /// 读取指定节点的指定属性值(Value)128 /// </summary>129 /// <param >节点名称</param>130 /// <param >此节点的属性</param>131 /// <returns></returns>132 public string GetXmlNodeAttributeValue(string strNode, string strAttribute)133 {134 string strReturn = "";135 try136 {137 //根据指定路径获取节点138 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);139 if (!(xmlNode == null))140 {141 strReturn = xmlNode.Attributes.GetNamedItem(strAttribute).Value;142143 /**/////获取节点的属性,并循环取出需要的属性值144 //XmlAttributeCollection xmlAttr = xmlNode.Attributes;145 //for (int i = 0; i < xmlAttr.Count; i++)146 //{147 // if (xmlAttr.Item(i).Name == strAttribute)148 // {149 // strReturn = xmlAttr.Item(i).Value;150 // break;151 // }152 //}153 }154 }155 catch (XmlException xmle)156 {157 throw xmle;158 }159 return strReturn;160 }161 #endregion162163 读取指定节点的值-----------------------------------------------#region 读取指定节点的值-----------------------------------------------164 /**//// <summary>165 /// 功能:166 /// 读取指定节点的值(InnerText)167 /// </summary>168 /// <param >节点名称</param>169 /// <returns></returns>170 public string GetXmlNodeValue(string strNode)171 {172 string strReturn = String.Empty;173 try174 {175 //根据路径获取节点176 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);177 if (!(xmlNode == null))178 strReturn = xmlNode.InnerText;179 }180 catch (XmlException xmle)181 {182 throw xmle;183 }184 return strReturn;185 }186 #endregion187188 设置节点值-----------------------------------------------------#region 设置节点值-----------------------------------------------------189 /**//// <summary>190 /// 功能:191 /// 设置节点值(InnerText)192 /// </summary>193 /// <param >节点的名称</param>194 /// <param >节点值</param>195 public void SetXmlNodeValue(string xmlNodePath, string xmlNodeValue)196 {197 try198 {199 //可以批量为符合条件的节点进行付值200 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);201 if (!(xmlNode == null))202 {203 foreach (XmlNode xn in xmlNode)204 {205 xn.InnerText = xmlNodeValue;206 }207 }208 /**//**/209 /**//*210 * 根据指定路径获取节点211 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ; 212 //设置节点值213 if (!(xmlNode==null))214 xmlNode.InnerText = xmlNodeValue ;*/215 }216 catch (XmlException xmle)217 {218 throw xmle;219 }220 }221 #endregion222223 设置节点的属性值-----------------------------------------------#region 设置节点的属性值-----------------------------------------------224 /**//// <summary>225 /// 功能:226 /// 设置节点的属性值 227 /// </summary>228 /// <param >节点名称</param>229 /// <param >属性名称</param>230 /// <param >属性值</param>231 public void SetXmlNodeAttributeValue(string xmlNodePath, string xmlNodeAttribute, string xmlNodeAttributeValue)232 {233 try234 {235 //可以批量为符合条件的节点的属性付值236 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);237 if (!(xmlNode == null))238 {239 foreach (XmlNode xn in xmlNode)240 {241 XmlAttributeCollection xmlAttr = xn.Attributes;242 for (int i = 0; i < xmlAttr.Count; i++)243 {244 if (xmlAttr.Item(i).Name == xmlNodeAttribute)245 {246 xmlAttr.Item(i).Value = xmlNodeAttributeValue;247 break;248 }249 }250 }251 }252 }253 catch (XmlException xmle)254 {255 throw xmle;256 }257 }258 #endregion259260 添加-----------------------------------------------------------#region 添加-----------------------------------------------------------261 /**//// <summary>262 /// 获取XML文件的根元素263 /// </summary>264 public XmlNode GetXmlRoot()265 {266 return xmlDoc.DocumentElement;267 }268269 /**//// <summary>270 /// 在根节点下添加父节点271 /// </summary>272 public void AddParentNode(string parentNode)273 {274 try275 {276 XmlNode root = GetXmlRoot();277 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);278 root.AppendChild(parentXmlNode);279 }280 catch (XmlException xmle)281 {282 throw xmle;283 }284 }285286 /**//// <summary>287 /// 向一个已经存在的父节点中插入一个子节点,并返回子节点.288 /// </summary>289 /// <param >父节点</param>290 /// <param >字节点名称</param>291 public XmlNode AddChildNode(string parentNodePath, string childnodename)292 {293 XmlNode childXmlNode = null;294 try295 {296 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);297 if (!((parentXmlNode) == null))//如果此节点存在298 {299 childXmlNode = xmlDoc.CreateElement(childnodename);300 parentXmlNode.AppendChild(childXmlNode);301 }302 else303 {//如果不存在就放父节点添加304 this.GetXmlRoot().AppendChild(childXmlNode);305 }306 }307 catch (XmlException xmle)308 {309 throw xmle;310 }311 return childXmlNode;312 }313 /**//// <summary>314 /// 向一个已经存在的父节点中插入一个子节点,并添加一个属性315 /// </summary>316 public void AddChildNode(string parentNodePath, string childnodename, string NodeAttribute, string NodeAttributeValue)317 {318 try319 {320 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);321 XmlNode childXmlNode = null;322 if (!((parentXmlNode) == null))//如果此节点存在323 {324 childXmlNode = xmlDoc.CreateElement(childnodename);325326 //添加属性327 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);328 nodeAttribute.Value = NodeAttributeValue;329 childXmlNode.Attributes.Append(nodeAttribute);330331 parentXmlNode.AppendChild(childXmlNode);332 }333 else334 {//如果不存在就放父节点添加335 this.GetXmlRoot().AppendChild(childXmlNode);336 }337 }338 catch (XmlException xmle)339 {340 throw xmle;341 }342 }343344 /**//// <summary>345 /// 向一个节点添加属性,值为空346 /// </summary>347 /// <param >节点路径</param>348 /// <param >属性名</param>349 public void AddAttribute(string NodePath, string NodeAttribute)350 {351 privateAddAttribute(NodePath, NodeAttribute, "");352 }353 /**//// <summary>354 /// 向一个节点添加属性,并赋值***355 /// </summary>356 public void AddAttribute(XmlNode childXmlNode, string NodeAttribute, string NodeAttributeValue)357 {358 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);359 nodeAttribute.Value = NodeAttributeValue;360 childXmlNode.Attributes.Append(nodeAttribute);361 }362363 /**//// <summary>364 /// 向一个节点添加属性365 /// </summary>366 /// <param >节点路径</param>367 /// <param >属性名</param>368 /// <param >属性值</param>369 private void privateAddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)370 {371 try372 {373 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);374 if (!(nodePath == null))375 {376 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);377 nodeAttribute.Value = NodeAttributeValue;378 nodePath.Attributes.Append(nodeAttribute);379 }380 }381 catch (XmlException xmle)382 {383 throw xmle;384 }385 }386 /**//// <summary>387 /// 向一个节点添加属性,并赋值388 /// </summary>389 /// <param >节点</param>390 /// <param >属性名</param>391 /// <param >属性值</param>392 public void AddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)393 {394 privateAddAttribute(NodePath, NodeAttribute, NodeAttributeValue);395 }396 #endregion397398 删除-----------------------------------------------------------#region 删除-----------------------------------------------------------399 /**//// <summary>400 /// 删除节点的一个属性401 /// </summary>402 /// <param >节点所在的xpath表达式</param>403 /// <param >属性名</param>404 public void DeleteAttribute(string NodePath, string NodeAttribute)405 {406 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);407 if (!(nodePath == null))408 {409 foreach (XmlNode tempxn in nodePath)410 {411 XmlAttributeCollection xmlAttr = tempxn.Attributes;412 for (int i = 0; i < xmlAttr.Count; i++)413 {414 if (xmlAttr.Item(i).Name == NodeAttribute)415 {416 tempxn.Attributes.RemoveAt(i);417 break;418 }419 }420 }421 }422 }423424 /**//// <summary>425 /// 删除节点的一个属性,当其属性值等于给定的值时426 /// </summary>427 /// <param >节点所在的xpath表达式</param>428 /// <param >属性</param>429 /// <param >值</param>430 public void DeleteAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)431 {432 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);433 if (!(nodePath == null))434 {435 foreach (XmlNode tempxn in nodePath)436 {437 XmlAttributeCollection xmlAttr = tempxn.Attributes;438 for (int i = 0; i < xmlAttr.Count; i++)439 {440 if (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value == NodeAttributeValue)441 {442 tempxn.Attributes.RemoveAt(i);443 break;444 }445 }446 }447 }448 }449 /**//// <summary>450 /// 删除节点451 /// </summary>452 /// <param ></param>453 /// <remarks></remarks>454 public void DeleteXmlNode(string tempXmlNode)455 {456 XmlNodeList nodePath = this.xmlDoc.SelectNodes(tempXmlNode);457 if (!(nodePath == null))458 {459 foreach (XmlNode xn in nodePath)460 {461 xn.ParentNode.RemoveChild(xn);462 }463 }464 }465466 #endregion467468 XML文档事件----------------------------------------------------#region XML文档事件----------------------------------------------------469 /**//// <summary>470 /// 节点插入事件471 /// </summary>472 /// <param ></param>473 /// <param ></param>474 private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)475 {476 //保存设置477 SaveXmlDocument();478 }479 /**//// <summary>480 /// 节点删除事件481 /// </summary>482 /// <param ></param>483 /// <param ></param>484 private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)485 {486 //保存设置487 SaveXmlDocument();488 }489 /**//// <summary>490 /// 节点更新事件491 /// </summary>492 /// <param ></param>493 /// <param ></param>494 private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)495 {496 //保存设置497 SaveXmlDocument();498 }499 #endregion500501 保存XML文件----------------------------------------------------#region 保存XML文件----------------------------------------------------502 /**//// <summary>503 /// 功能:504 /// 保存XML文件505 /// </summary>506 public void SaveXmlDocument()507 {508 try509 {510 //保存设置的结果511 Savexml(xmlFilePath);512513 }514 catch (XmlException xmle)515 {516 throw xmle;517 }518 }519520 /**//// <summary>521 /// 功能:522 /// 保存XML文件 523 /// </summary>524 public void SaveXmlDocument(string tempXMLFilePath)525 {526 try527 {528 //保存设置的结果529 Savexml(tempXMLFilePath);530 }531 catch (XmlException xmle)532 {533 throw xmle;534 }535 }536 /**//// <summary>537 ///538 /// </summary>539 /// <param ></param>540 private void Savexml(string filepath)541 {542 xmlDoc.Save(filepath);543 }544545 #endregion546547}
548
549
转载于:https://www.cnblogs.com/zhahost/archive/2009/03/26/1422104.html
转载请注明原文地址: https://win8.8miu.com/read-1552355.html