前端之家收集整理的这篇文章主要介绍了
xml文档操作类C#,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
- using System;
- using System.Xml;
- using System.Configuration;
- using System.Data;
- using System.Collections;
- using System.IO;
-
- namespace YZControl
- {
- public class NewXmlControl : Object
- {
- protected string strXmlFile;
- protected XmlDocument objXmlDoc = new XmlDocument();
-
-
- public NewXmlControl(string XmlFile,Boolean bOverWrite,string sRoot)
- {
- try
- {
- //如果覆盖模式,则强行创建一个xml文档
- if (bOverWrite)
- {
- objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0","utf-8",null));//设置xml的版本,格式信息
- objXmlDoc.AppendChild(objXmlDoc.CreateElement("",sRoot,""));//创建根元素
- objXmlDoc.Save(XmlFile);//保存
- }
- else //否则,检查文件是否存在,不存在则创建
- {
- if (!(File.Exists(XmlFile)))
- {
- objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0",null));
- objXmlDoc.AppendChild(objXmlDoc.CreateElement("",""));
- objXmlDoc.Save(XmlFile);
- }
- }
- objXmlDoc.Load(XmlFile);
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- strXmlFile = XmlFile;
- }
-
-
-
- /// <summary>
- /// 根据xPath值,返回xPath下的所有下级子结节到一个DataView
- /// </summary>
- /// <param name="XmlPathNode">xPath值</param>
- /// <returns>有数据则返回DataView,否则返回null</returns>
- public DataView GetData(string XmlPathNode)
- {
- //查找数据。返回一个DataView
- DataSet ds = new DataSet();
- try
- {
- StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
- ds.ReadXml(read);
- return ds.Tables[0].DefaultView;
- }
- catch
- {
- //throw;
- return null;
- }
- }
-
- /// <summary>
- /// 更新节点内容
- /// </summary>
- /// <param name="xmlPathNode"></param>
- /// <param name="content"></param>
- public void UpdateNode(string xmlPathNode,string content)
- {
- objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
- }
-
- /// <summary>
- /// 更新节点的某个属性
- /// </summary>
- /// <param name="xmlPathNode">要操作的节点</param>
- /// <param name="AttribName">属性名</param>
- /// <param name="AttribValue">属性值</param>
- public void UpdateNode(string xmlPathNode,string AttribName,string AttribValue)
- {
-
- ((XmlElement)(objXmlDoc.SelectSingleNode(xmlPathNode))).SetAttribute(AttribName,AttribValue);
- }
-
-
- /// <summary>
- /// 修改节点(同步更新内容和属性)
- /// </summary>
- /// <param name="xmlPathNode">要操作节点的xpath语句</param>
- /// <param name="arrAttribName">属性名称字符串数组</param>
- /// <param name="arrAttribContent">属性内容字符串数组</param>
- /// <param name="content">节点内容</param>
- public void UpdateNode(string xmlPathNode,string[] arrAttribName,string[] arrAttribContent,string content)
- {
-
- XmlNode xn = objXmlDoc.SelectSingleNode(xmlPathNode);
- if (xn != null)
- {
- xn.InnerText = content;
- xn.Attributes.RemoveAll();
- for (int i = 0; i <= arrAttribName.GetUpperBound(0); i++)
- {
- ((XmlElement)(xn)).SetAttribute(arrAttribName[i],arrAttribContent[i]);
- }
-
- }
- }
-
- /// <summary>
- /// 移除选定节点集的所有属性
- /// </summary>
- /// <param name="xmlPathNode"></param>
- public void RemoveAllAttribute(string xmlPathNode)
- {
- XmlNodeList xnl = objXmlDoc.SelectNodes(xmlPathNode);
- foreach (XmlNode xn in xnl)
- {
- xn.Attributes.RemoveAll();
- }
- }
-
-
- public void DeleteNode(string Node)
- {
- //刪除一个节点。
- try
- {
- string mainNode = Node.Substring(0,Node.LastIndexOf("/"));
- objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
- }
- catch
- {
- //throw;
- return;
- }
- }
-
-
- public void InsertNodeWithChild(string mainNode,string ChildNode,string Element,string Content)
- {
- //插入一节点和此节点的一子节点。
- XmlNode objRootNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
- objRootNode.AppendChild(objChildNode);//插入节点
- XmlElement objElement = objXmlDoc.CreateElement(Element);
- objElement.InnerText = Content;
- objChildNode.AppendChild(objElement);//插入子节点
- }
-
- /// <summary>
- /// 插入一个节点,带一个Attribute和innerText
- /// </summary>
- /// <param name="mainNode"></param>
- /// <param name="Element">节点名称</param>
- /// <param name="Attrib">Attribute名称</param>
- /// <param name="AttribContent">Attribute值</param>
- /// <param name="Content">innerText值</param>
- public void InsertNode(string mainNode,string Attrib,string AttribContent,string Content)
- {
- XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objElement = objXmlDoc.CreateElement(Element);
- objElement.SetAttribute(Attrib,AttribContent);
- objElement.InnerText = Content;
- objNode.AppendChild(objElement);
- }
-
- /// <summary>
- /// 插入一个节点,带一个Attribute
- /// </summary>
- /// <param name="mainNode"></param>
- /// <param name="Element">节点名称</param>
- /// <param name="Attrib">Attribute名称</param>
- /// <param name="AttribContent">Attribute值</param>
- public void InsertNode(string mainNode,string AttribContent)
- {
- XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objElement = objXmlDoc.CreateElement(Element);
- objElement.SetAttribute(Attrib,AttribContent);
- objNode.AppendChild(objElement);
- }
-
-
- /// <summary>
- /// 插入一个节点
- /// </summary>
- /// <param name="mainNode"></param>
- /// <param name="Element">节点名称</param>
- public void InsertNode(string mainNode,string Element)
- {
- XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objElement = objXmlDoc.CreateElement(Element);
- objNode.AppendChild(objElement);
- }
-
-
- //<summary>
- //插入一个节点,带多个属性和一个inner text
- //</summary>
- public void InsertNode(string mainNode,string elementName,string[] arrAttributeName,string[] arrAttributeContent,string elementContent)
- {
- try
- {
- XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objElement = objXmlDoc.CreateElement(elementName);
- for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
- {
- objElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
- }
- objElement.InnerText = elementContent;
- objNode.AppendChild(objElement);
- }
- catch
- {
- throw;
- //string t = mainNode;
- //;
- }
- }
-
- ///<summary>
- ///插入一个节点,带多个属性
- ///</summary>
- public void InsertNode(string mainNode,string[] arrAttributeContent)
- {
- try
- {
- XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
- XmlElement objElement = objXmlDoc.CreateElement(elementName);
- for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
- {
- objElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
- }
- //objElement.InnerText = elementContent;
- objNode.AppendChild(objElement);
- }
- catch
- {
- throw;
- //string t = mainNode;
- //;
- }
- }
-
- /// <summary>
- /// 插入子节点(带多个属性)
- /// </summary>
- /// <param name="parentNode">要插入的父节点</param>
- /// <param name="elementName">插入的节点名称</param>
- /// <param name="arrAttributeName">属性名称[数组]</param>
- /// <param name="arrAttributeContent">属性内容[数组]</param>
- /// <param name="elementContent">节点内容</param>
- public void AddChildNode(string parentNodePath,string elementContent)
- {
- try
- {
- XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
- XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
- for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
- {
- objChildElement.SetAttribute(arrAttributeName[i],arrAttributeContent[i]);
- }
- objChildElement.InnerText = elementContent;
- parentNode.AppendChild(objChildElement);
- }
- catch
- {
- return;
- }
-
- }
-
- /// <summary>
- /// 插入子节点(将内容以CData形式写入)
- /// </summary>
- /// <param name="parentNode">要插入的父节点</param>
- /// <param name="elementName">插入的节点名称</param>
- /// <param name="elementContent">节点内容</param>
- public void AddChildNodeCData(string parentNodePath,string elementContent)
- {
- try
- {
- XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
- XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
-
- //写入cData数据
- XmlCDataSection xcds = objXmlDoc.CreateCDataSection(elementContent);
-
- objChildElement.AppendChild(xcds);
- parentNode.AppendChild(objChildElement);
- }
- catch
- {
- return;
- }
-
- }
-
-
- /// <summary>
- /// 插入子节点(仅内容,不带属性)
- /// </summary>
- /// <param name="parentNode">要插入的父节点</param>
- /// <param name="elementName">插入的节点名称</param>
- /// <param name="elementContent">节点内容</param>
- public void AddChildNode(string parentNodePath,string elementContent)
- {
- try
- {
- XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
- XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
-
- objChildElement.InnerText = elementContent;
- parentNode.AppendChild(objChildElement);
- }
- catch
- {
- return;
- }
-
- }
-
- /// <summary>
- /// 根据xpath值查找节点
- /// </summary>
- /// <param name="NodePath">要查找节点的xpath值</param>
- /// <returns>找到返回true,否则返回true</returns>
- public bool FindNode(string NodePath)
- {
- try
- {
- if (objXmlDoc.SelectSingleNode(NodePath) != null)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- catch
- {
- return false;
- }
- }
-
-
- /// <summary>
- ///保存文档
- /// </summary>
- public void Save()
- {
- //保存文档。
- try
- {
- objXmlDoc.Save(strXmlFile);
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- objXmlDoc = null;
- }
-
-
-
-
- }
- }
-
- 调用方法
- NewXmlControl xc = new NewXmlControl(Server.MapPath("~/RSS.xml"),true,"RSS");
- xc.UpdateNode("//RSS","version","2.0");
- xc.InsertNode("//RSS","channel");
- xc.AddChildNode("/RSS/channel","title",Shop.DAL.sp_netconfig.GetConfigObj().webname);
- // xc.AddChildNode("/RSS/channel","slogan",Shop.DAL.sp_netconfig.GetConfigObj().webname);
- xc.AddChildNode("/RSS/channel","link",Shop.DAL.sp_netconfig.GetConfigObj().weburl);
- xc.AddChildNode("/RSS/channel","language","zh-cn");
- xc.AddChildNode("/RSS/channel","description",Shop.DAL.sp_netconfig.GetConfigObj().Metatwo);
- // xc.AddChildNode("/RSS/channel","copyright",Shop.DAL.sp_netconfig.GetConfigObj().copyright);
- xc.AddChildNode("/RSS/channel","author","generator","RSS Generator By Taoxian");
- 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");
- for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
- {
- int j = i + 1;
- xc.InsertNode("/RSS/channel","item");
- xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",ds.Tables[0].Rows[i]["pro_Name"].ToString());
- xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",Shop.DAL.sp_netconfig.GetConfigObj().weburl + "/Product/ProductInfo_" + ds.Tables[0].Rows[i]["pro_ID"].ToString() + ".html");
- xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]","pubDate",Convert.ToDateTime(ds.Tables[0].Rows[i]["pro_CreateTime"].ToString()).GetDateTimeFormats('r')[0].ToString());
- xc.AddChildNode("/RSS/channel/item[" + j.ToString() + "]",Shop.DAL.sp_netconfig.GetConfigObj().webname);
- xc.AddChildNodeCData("/RSS/channel/item[" + j.ToString() + "]",ds.Tables[0].Rows[i]["pro_Content"].ToString());
- }
- ds.Dispose();
- xc.Save();
- YZControl.staticFunction.FinalMessage("生成RSS成功!","html.aspx",2);