xml文檔操作類C#

pw36 9年前發布 | 1K 次閱讀 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", "utf-8", null));  
                        objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));  
                        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 Element, 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 Element, string Attrib, 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 elementName, string[] arrAttributeName, 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 elementName, string[] arrAttributeName, string[] arrAttributeContent, 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 elementName, 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 elementName, 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", Shop.DAL.sp_netconfig.GetConfigObj().webname);  
            xc.AddChildNode("/rss/channel", "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() + "]", "title", ds.Tables[0].Rows[i]["pro_Name"].ToString());  
                xc.AddChildNode("/rss/channel/item[" + j.ToString() + "]", "link", 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() + "]", "author", Shop.DAL.sp_netconfig.GetConfigObj().webname);  
                xc.AddChildNodeCData("/rss/channel/item[" + j.ToString() + "]", "description", ds.Tables[0].Rows[i]["pro_Content"].ToString());  
            }  
            ds.Dispose();  
            xc.Save();  
            YZControl.staticFunction.FinalMessage("生成RSS成功!", "html.aspx", 0, 2);   </pre> 


 本文由用戶 pw36 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!