XmlHelper.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. using System.Xml;
  2. using System.Data;
  3. namespace Ant.Service.Utilities
  4. {
  5. /// <summary>
  6. /// Xml的操作公共类
  7. /// </summary>
  8. public class XmlHelper
  9. {
  10. #region 字段定义
  11. /// <summary>
  12. /// XML文件的物理路径
  13. /// </summary>
  14. private string _filePath = string.Empty;
  15. /// <summary>
  16. /// Xml文档
  17. /// </summary>
  18. private XmlDocument _xml;
  19. /// <summary>
  20. /// XML的根节点
  21. /// </summary>
  22. private XmlElement _element;
  23. #endregion
  24. #region 构造方法
  25. /// <summary>
  26. /// 实例化XmlHelper对象
  27. /// </summary>
  28. /// <param name="xmlFilePath">Xml文件的相对路径</param>
  29. public XmlHelper(string xmlFilePath)
  30. {
  31. //获取XML文件的绝对路径
  32. _filePath = SysHelper.GetPath(xmlFilePath);
  33. }
  34. #endregion
  35. #region 创建XML的根节点
  36. /// <summary>
  37. /// 创建XML的根节点
  38. /// </summary>
  39. private void CreateXMLElement()
  40. {
  41. //创建一个XML对象
  42. _xml = new XmlDocument();
  43. if (DirFile.IsExistFile(_filePath))
  44. {
  45. //加载XML文件
  46. _xml.Load(this._filePath);
  47. }
  48. //为XML的根节点赋值
  49. _element = _xml.DocumentElement;
  50. }
  51. #endregion
  52. #region 获取指定XPath表达式的节点对象
  53. /// <summary>
  54. /// 获取指定XPath表达式的节点对象
  55. /// </summary>
  56. /// <param name="xPath">XPath表达式,
  57. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  58. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  59. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  60. /// </param>
  61. public XmlNode GetNode(string xPath)
  62. {
  63. //创建XML的根节点
  64. CreateXMLElement();
  65. //返回XPath节点
  66. return _element.SelectSingleNode(xPath);
  67. }
  68. #endregion
  69. #region 获取指定XPath表达式节点的值
  70. /// <summary>
  71. /// 获取指定XPath表达式节点的值
  72. /// </summary>
  73. /// <param name="xPath">XPath表达式,
  74. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  75. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  76. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  77. /// </param>
  78. public string GetValue(string xPath)
  79. {
  80. //创建XML的根节点
  81. CreateXMLElement();
  82. //返回XPath节点的值
  83. return _element.SelectSingleNode(xPath).InnerText;
  84. }
  85. #endregion
  86. #region 获取指定XPath表达式节点的属性值
  87. /// <summary>
  88. /// 获取指定XPath表达式节点的属性值
  89. /// </summary>
  90. /// <param name="xPath">XPath表达式,
  91. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  92. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  93. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  94. /// </param>
  95. /// <param name="attributeName">属性名</param>
  96. public string GetAttributeValue(string xPath, string attributeName)
  97. {
  98. //创建XML的根节点
  99. CreateXMLElement();
  100. //返回XPath节点的属性值
  101. return _element.SelectSingleNode(xPath).Attributes[attributeName].Value;
  102. }
  103. #endregion
  104. #region 新增节点
  105. /// <summary>
  106. /// 1. 功能:新增节点。
  107. /// 2. 使用条件:将任意节点插入到当前Xml文件中。
  108. /// </summary>
  109. /// <param name="xmlNode">要插入的Xml节点</param>
  110. public void AppendNode(XmlNode xmlNode)
  111. {
  112. //创建XML的根节点
  113. CreateXMLElement();
  114. //导入节点
  115. XmlNode node = _xml.ImportNode(xmlNode, true);
  116. //将节点插入到根节点下
  117. _element.AppendChild(node);
  118. }
  119. /// <summary>
  120. /// 1. 功能:新增节点。
  121. /// 2. 使用条件:将DataSet中的第一条记录插入Xml文件中。
  122. /// </summary>
  123. /// <param name="ds">DataSet的实例,该DataSet中应该只有一条记录</param>
  124. public void AppendNode(DataSet ds)
  125. {
  126. //创建XmlDataDocument对象
  127. XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);
  128. //导入节点
  129. XmlNode node = xmlDataDocument.DocumentElement.FirstChild;
  130. //将节点插入到根节点下
  131. AppendNode(node);
  132. }
  133. #endregion
  134. #region 删除节点
  135. /// <summary>
  136. /// 删除指定XPath表达式的节点
  137. /// </summary>
  138. /// <param name="xPath">XPath表达式,
  139. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  140. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  141. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  142. /// </param>
  143. public void RemoveNode(string xPath)
  144. {
  145. //创建XML的根节点
  146. CreateXMLElement();
  147. //获取要删除的节点
  148. XmlNode node = _xml.SelectSingleNode(xPath);
  149. //删除节点
  150. _element.RemoveChild(node);
  151. }
  152. #endregion //删除节点
  153. #region 保存XML文件
  154. /// <summary>
  155. /// 保存XML文件
  156. /// </summary>
  157. public void Save()
  158. {
  159. //创建XML的根节点
  160. CreateXMLElement();
  161. //保存XML文件
  162. _xml.Save(this._filePath);
  163. }
  164. #endregion //保存XML文件
  165. #region 静态方法
  166. #region 创建根节点对象
  167. /// <summary>
  168. /// 创建根节点对象
  169. /// </summary>
  170. /// <param name="xmlFilePath">Xml文件的相对路径</param>
  171. private static XmlElement CreateRootElement(string xmlFilePath)
  172. {
  173. //定义变量,表示XML文件的绝对路径
  174. string filePath = "";
  175. //获取XML文件的绝对路径
  176. filePath = SysHelper.GetPath(xmlFilePath);
  177. //创建XmlDocument对象
  178. XmlDocument xmlDocument = new XmlDocument();
  179. //加载XML文件
  180. xmlDocument.Load(filePath);
  181. //返回根节点
  182. return xmlDocument.DocumentElement;
  183. }
  184. #endregion
  185. #region 获取指定XPath表达式节点的值
  186. /// <summary>
  187. /// 获取指定XPath表达式节点的值
  188. /// </summary>
  189. /// <param name="xmlFilePath">Xml文件的相对路径</param>
  190. /// <param name="xPath">XPath表达式,
  191. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  192. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  193. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  194. /// </param>
  195. public static string GetValue(string xmlFilePath, string xPath)
  196. {
  197. //创建根对象
  198. XmlElement rootElement = CreateRootElement(xmlFilePath);
  199. //返回XPath节点的值
  200. return rootElement.SelectSingleNode(xPath).InnerText;
  201. }
  202. #endregion
  203. #region 获取指定XPath表达式节点的属性值
  204. /// <summary>
  205. /// 获取指定XPath表达式节点的属性值
  206. /// </summary>
  207. /// <param name="xmlFilePath">Xml文件的相对路径</param>
  208. /// <param name="xPath">XPath表达式,
  209. /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
  210. /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
  211. /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
  212. /// </param>
  213. /// <param name="attributeName">属性名</param>
  214. public static string GetAttributeValue(string xmlFilePath, string xPath, string attributeName)
  215. {
  216. //创建根对象
  217. XmlElement rootElement = CreateRootElement(xmlFilePath);
  218. //返回XPath节点的属性值
  219. return rootElement.SelectSingleNode(xPath).Attributes[attributeName].Value;
  220. }
  221. #endregion
  222. #endregion
  223. public static void SetValue(string xmlFilePath, string xPath, string newtext)
  224. {
  225. //string path = SysHelper.GetPath(xmlFilePath);
  226. //var queryXML = from xmlLog in xelem.Descendants("msg_log")
  227. // //所有名字为Bin的记录
  228. // where xmlLog.Element("user").Value == "Bin"
  229. // select xmlLog;
  230. //foreach (XElement el in queryXML)
  231. //{
  232. // el.Element("user").Value = "LiuBin";//开始修改
  233. //}
  234. //xelem.Save(path);
  235. }
  236. }
  237. }