xml文档操作类C#

前端之家收集整理的这篇文章主要介绍了xml文档操作类C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. using System;
  2. using System.Xml;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Collections;
  6. using System.IO;
  7.  
  8. namespace YZControl
  9. {
  10. public class NewXmlControl : Object
  11. {
  12. protected string strXmlFile;
  13. protected XmlDocument objXmlDoc = new XmlDocument();
  14.  
  15.  
  16. public NewXmlControl(string XmlFile,Boolean bOverWrite,string sRoot)
  17. {
  18. try
  19. {
  20. //如果覆盖模式,则强行创建一个xml文档
  21. if (bOverWrite)
  22. {
  23. objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0","utf-8",null));//设置xml的版本,格式信息
  24. objXmlDoc.AppendChild(objXmlDoc.CreateElement("",sRoot,""));//创建根元素
  25. objXmlDoc.Save(XmlFile);//保存
  26. }
  27. else //否则,检查文件是否存在,不存在则创建
  28. {
  29. if (!(File.Exists(XmlFile)))
  30. {
  31. objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0",null));
  32. objXmlDoc.AppendChild(objXmlDoc.CreateElement("",""));
  33. objXmlDoc.Save(XmlFile);
  34. }
  35. }
  36. objXmlDoc.Load(XmlFile);
  37. }
  38. catch (System.Exception ex)
  39. {
  40. throw ex;
  41. }
  42. strXmlFile = XmlFile;
  43. }
  44.  
  45.  
  46.  
  47. /// <summary>
  48. /// 根据xPath值,返回xPath下的所有下级子结节到一个DataView
  49. /// </summary>
  50. /// <param name="XmlPathNode">xPath值</param>
  51. /// <returns>有数据则返回DataView,否则返回null</returns>
  52. public DataView GetData(string XmlPathNode)
  53. {
  54. //查找数据。返回一个DataView
  55. DataSet ds = new DataSet();
  56. try
  57. {
  58. StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
  59. ds.ReadXml(read);
  60. return ds.Tables[0].DefaultView;
  61. }
  62. catch
  63. {
  64. //throw;
  65. return null;
  66. }
  67. }
  68.  
  69. /// <summary>
  70. /// 更新节点内容
  71. /// </summary>
  72. /// <param name="xmlPathNode"></param>
  73. /// <param name="content"></param>
  74. public void UpdateNode(string xmlPathNode,string content)
  75. {
  76. objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
  77. }
  78.  
  79. /// <summary>
  80. /// 更新节点的某个属性
  81. /// </summary>
  82. /// <param name="xmlPathNode">要操作的节点</param>
  83. /// <param name="AttribName">属性名</param>
  84. /// <param name="AttribValue">属性值</param>
  85. public void UpdateNode(string xmlPathNode,string AttribName,string AttribValue)
  86. {
  87.  
  88. ((XmlElement)(objXmlDoc.SelectSingleNode(xmlPathNode))).SetAttribute(AttribName,AttribValue);
  89. }
  90.  
  91.  
  92. /// <summary>
  93. /// 修改节点(同步更新内容属性)
  94. /// </summary>
  95. /// <param name="xmlPathNode">要操作节点的xpath语句</param>
  96. /// <param name="arrAttribName">属性名称字符串数组</param>
  97. /// <param name="arrAttribContent">属性内容字符串数组</param>
  98. /// <param name="content">节点内容</param>
  99. public void UpdateNode(string xmlPathNode,string[] arrAttribName,string[] arrAttribContent,string content)
  100. {
  101.  
  102. XmlNode xn = objXmlDoc.SelectSingleNode(xmlPathNode);
  103. if (xn != null)
  104. {
  105. xn.InnerText = content;
  106. xn.Attributes.RemoveAll();
  107. for (int i = 0; i <= arrAttribName.GetUpperBound(0); i++)
  108. {
  109. ((XmlElement)(xn)).SetAttribute(arrAttribName[i],arrAttribContent[i]);
  110. }
  111.  
  112. }
  113. }
  114.  
  115. /// <summary>
  116. /// 移除选定节点集的所有属性
  117. /// </summary>
  118. /// <param name="xmlPathNode"></param>
  119. public void RemoveAllAttribute(string xmlPathNode)
  120. {
  121. XmlNodeList xnl = objXmlDoc.SelectNodes(xmlPathNode);
  122. foreach (XmlNode xn in xnl)
  123. {
  124. xn.Attributes.RemoveAll();
  125. }
  126. }
  127.  
  128.  
  129. public void DeleteNode(string Node)
  130. {
  131. //刪除一个节点。
  132. try
  133. {
  134. string mainNode = Node.Substring(0,Node.LastIndexOf("/"));
  135. objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
  136. }
  137. catch
  138. {
  139. //throw;
  140. return;
  141. }
  142. }
  143.  
  144.  
  145. public void InsertNodeWithChild(string mainNode,string ChildNode,string Element,string Content)
  146. {
  147. //插入一节点和此节点的一子节点。
  148. XmlNode objRootNode = objXmlDoc.SelectSingleNode(mainNode);
  149. XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
  150. objRootNode.AppendChild(objChildNode);//插入节点
  151. XmlElement objElement = objXmlDoc.CreateElement(Element);
  152. objElement.InnerText = Content;
  153. objChildNode.AppendChild(objElement);//插入子节点
  154. }
  155.  
  156. /// <summary>
  157. /// 插入一个节点,带一个Attribute和innerText
  158. /// </summary>
  159. /// <param name="mainNode"></param>
  160. /// <param name="Element">节点名称</param>
  161. /// <param name="Attrib">Attribute名称</param>
  162. /// <param name="AttribContent">Attribute值</param>
  163. /// <param name="Content">innerText值</param>
  164. public void InsertNode(string mainNode,string Attrib,string AttribContent,string Content)
  165. {
  166. XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
  167. XmlElement objElement = objXmlDoc.CreateElement(Element);
  168. objElement.SetAttribute(Attrib,AttribContent);
  169. objElement.InnerText = Content;
  170. objNode.AppendChild(objElement);
  171. }
  172.  
  173. /// <summary>
  174. /// 插入一个节点,带一个Attribute
  175. /// </summary>
  176. /// <param name="mainNode"></param>
  177. /// <param name="Element">节点名称</param>
  178. /// <param name="Attrib">Attribute名称</param>
  179. /// <param name="AttribContent">Attribute值</param>
  180. public void InsertNode(string mainNode,string AttribContent)
  181. {
  182. XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
  183. XmlElement objElement = objXmlDoc.CreateElement(Element);
  184. objElement.SetAttribute(Attrib,AttribContent);
  185. objNode.AppendChild(objElement);
  186. }
  187.  
  188.  
  189. /// <summary>
  190. /// 插入一个节点
  191. /// </summary>
  192. /// <param name="mainNode"></param>
  193. /// <param name="Element">节点名称</param>
  194. public void InsertNode(string mainNode,string Element)
  195. {
  196. XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
  197. XmlElement objElement = objXmlDoc.CreateElement(Element);
  198. objNode.AppendChild(objElement);
  199. }
  200.  
  201.  
  202. //<summary>
  203. //插入一个节点,带多个属性和一个inner text
  204. //</summary>
  205. public void InsertNode(string mainNode,string elementName,string[] arrAttributeName,string[] arrAttributeContent,string elementContent)
  206. {
  207. try
  208. {
  209. XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
  210. XmlElement objElement = objXmlDoc.CreateElement(elementName);
  211. for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
  212. {
  213. objElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
  214. }
  215. objElement.InnerText = elementContent;
  216. objNode.AppendChild(objElement);
  217. }
  218. catch
  219. {
  220. throw;
  221. //string t = mainNode;
  222. //;
  223. }
  224. }
  225.  
  226. ///<summary>
  227. ///插入一个节点,带多个属性
  228. ///</summary>
  229. public void InsertNode(string mainNode,string[] arrAttributeContent)
  230. {
  231. try
  232. {
  233. XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
  234. XmlElement objElement = objXmlDoc.CreateElement(elementName);
  235. for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
  236. {
  237. objElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
  238. }
  239. //objElement.InnerText = elementContent;
  240. objNode.AppendChild(objElement);
  241. }
  242. catch
  243. {
  244. throw;
  245. //string t = mainNode;
  246. //;
  247. }
  248. }
  249.  
  250. /// <summary>
  251. /// 插入子节点(带多个属性)
  252. /// </summary>
  253. /// <param name="parentNode">要插入的父节点</param>
  254. /// <param name="elementName">插入的节点名称</param>
  255. /// <param name="arrAttributeName">属性名称[数组]</param>
  256. /// <param name="arrAttributeContent">属性内容[数组]</param>
  257. /// <param name="elementContent">节点内容</param>
  258. public void AddChildNode(string parentNodePath,string elementContent)
  259. {
  260. try
  261. {
  262. XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
  263. XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
  264. for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
  265. {
  266. objChildElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
  267. }
  268. objChildElement.InnerText = elementContent;
  269. parentNode.AppendChild(objChildElement);
  270. }
  271. catch
  272. {
  273. return;
  274. }
  275.  
  276. }
  277.  
  278. /// <summary>
  279. /// 插入子节点(将内容以CData形式写入)
  280. /// </summary>
  281. /// <param name="parentNode">要插入的父节点</param>
  282. /// <param name="elementName">插入的节点名称</param>
  283. /// <param name="elementContent">节点内容</param>
  284. public void AddChildNodeCData(string parentNodePath,string elementContent)
  285. {
  286. try
  287. {
  288. XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
  289. XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
  290.  
  291. //写入cData数据
  292. XmlCDataSection xcds = objXmlDoc.CreateCDataSection(elementContent);
  293.  
  294. objChildElement.AppendChild(xcds);
  295. parentNode.AppendChild(objChildElement);
  296. }
  297. catch
  298. {
  299. return;
  300. }
  301.  
  302. }
  303.  
  304.  
  305. /// <summary>
  306. /// 插入子节点(仅内容,不带属性)
  307. /// </summary>
  308. /// <param name="parentNode">要插入的父节点</param>
  309. /// <param name="elementName">插入的节点名称</param>
  310. /// <param name="elementContent">节点内容</param>
  311. public void AddChildNode(string parentNodePath,string elementContent)
  312. {
  313. try
  314. {
  315. XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
  316. XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
  317.  
  318. objChildElement.InnerText = elementContent;
  319. parentNode.AppendChild(objChildElement);
  320. }
  321. catch
  322. {
  323. return;
  324. }
  325.  
  326. }
  327.  
  328. /// <summary>
  329. /// 根据xpath值查找节点
  330. /// </summary>
  331. /// <param name="NodePath">要查找节点的xpath值</param>
  332. /// <returns>找到返回true,否则返回true</returns>
  333. public bool FindNode(string NodePath)
  334. {
  335. try
  336. {
  337. if (objXmlDoc.SelectSingleNode(NodePath) != null)
  338. {
  339. return true;
  340. }
  341. else
  342. {
  343. return false;
  344. }
  345. }
  346. catch
  347. {
  348. return false;
  349. }
  350. }
  351.  
  352.  
  353. /// <summary>
  354. ///保存文档
  355. /// </summary>
  356. public void Save()
  357. {
  358. //保存文档。
  359. try
  360. {
  361. objXmlDoc.Save(strXmlFile);
  362. }
  363. catch (System.Exception ex)
  364. {
  365. throw ex;
  366. }
  367. objXmlDoc = null;
  368. }
  369.  
  370.  
  371.  
  372.  
  373. }
  374. }
  375.  
  376. 调用方法
  377. NewXmlControl xc = new NewXmlControl(Server.MapPath("~/RSS.xml"),true,"RSS");
  378. xc.UpdateNode("//RSS","version","2.0");
  379. xc.InsertNode("//RSS","channel");
  380. xc.AddChildNode("/RSS/channel","title",Shop.DAL.sp_netconfig.GetConfigObj().webname);
  381. // xc.AddChildNode("/RSS/channel","slogan",Shop.DAL.sp_netconfig.GetConfigObj().webname);
  382. xc.AddChildNode("/RSS/channel","link",Shop.DAL.sp_netconfig.GetConfigObj().weburl);
  383. xc.AddChildNode("/RSS/channel","language","zh-cn");
  384. xc.AddChildNode("/RSS/channel","description",Shop.DAL.sp_netconfig.GetConfigObj().Metatwo);
  385. // xc.AddChildNode("/RSS/channel","copyright",Shop.DAL.sp_netconfig.GetConfigObj().copyright);
  386. xc.AddChildNode("/RSS/channel","author","generator","RSS Generator By Taoxian");
  387. DataSet ds = DbHelpersql.Query("select top 20 pro_ID,pro_Name,pro_CreateTime,pro_Content from sp_product where pro_SaleType=1 and pro_Stock>0 and pro_Audit=1 order by pro_ID desc");
  388. for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  389. {
  390. int j = i + 1;
  391. xc.InsertNode("/RSS/channel","item");
  392. xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",ds.Tables[0].Rows[i]["pro_Name"].ToString());
  393. xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",Shop.DAL.sp_netconfig.GetConfigObj().weburl + "/Product/ProductInfo_" + ds.Tables[0].Rows[i]["pro_ID"].ToString() + ".html");
  394. xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]","pubDate",Convert.ToDateTime(ds.Tables[0].Rows[i]["pro_CreateTime"].ToString()).GetDateTimeFormats('r')[0].ToString());
  395. xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",Shop.DAL.sp_netconfig.GetConfigObj().webname);
  396. xc.AddChildNodeCData("/RSS/channel/item[" + j.ToString() + "]",ds.Tables[0].Rows[i]["pro_Content"].ToString());
  397. }
  398. ds.Dispose();
  399. xc.Save();
  400. YZControl.staticFunction.FinalMessage("生成RSS成功!","html.aspx",2);

猜你在找的XML相关文章