C#創建、讀寫、增加、刪除XML操作


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Collections;

namespace CommandXML
{
    public class cmdXML
    {


        /// <summary>
        /// 創建XML文件
        /// </summary>
        /// <param name="xmlFilePath">存放目錄</param>
        /// <param name="rootNodename">根節點名字</param>
        public void CreateXMLDoc(string xmlFilePath, string rootNodename)
         {
             //初始化一個xml實例
             XmlDocument myXmlDoc = new XmlDocument();
             //<?xml version="1.0" encoding="UTF-8"?>
             myXmlDoc.AppendChild(myXmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
             //創建xml的根節點
             XmlElement rootElement = myXmlDoc.CreateElement(rootNodename);
             //將根節點加入到xml文件中(AppendChild)
             myXmlDoc.AppendChild(rootElement);
             myXmlDoc.Save(xmlFilePath);
         }


        /// <summary>
        /// 增加第一層的節點
        /// </summary>
        /// <param name="xmlFilePath">文件路徑</param>
        /// <param name="RootPath">根節點名字</param>
        /// <param name="Name">所要添加第一層節點的節點名</param>
        /// <param name="attribute"></param>
        public void AddXmlFirstNode(string xmlFilePath, string RootPath, string Name, string[,] attribute)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);

                 XmlNode memberlist = myXmlDoc.SelectSingleNode(RootPath);
                 //XmlNodeList nodelist = memberlist.ChildNodes;

                 XmlElement firstLevelElement1 = myXmlDoc.CreateElement(Name);
                 //填充第一層的第一個子節點的屬性值(SetAttribute)
                 for (int i = 0; i < attribute.GetLength(0); i++)
                 {
                     firstLevelElement1.SetAttribute(attribute[i, 0], attribute[i, 1]);
                 }
                 //將第一層的第一個子節點加入到根節點下
                 memberlist.AppendChild(firstLevelElement1);

                 //保存更改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

         /// <summary>
         /// 增加第二層節點
         /// </summary>
         /// <param name="xmlFilePath">路徑</param>
         /// <param name="RootPath">根節點名</param>
         /// <param name="FirstElementattributesName">第一層節點屬性名</param>
         /// <param name="Firstattributes">第一層節點屬性名對應的值</param>
         /// <param name="SecondElement">所要增加的第二層節點名</param>
         /// <param name="SecondinnerText">第二層節點對應的存儲內容</param>
        public void AddXmlSecondNod(string xmlFilePath, string RootPath, string FirstElementattributesName, string Firstattributes, string[] SecondElement, string[] SecondinnerText)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);

                 XmlNode memberlist = myXmlDoc.SelectSingleNode(RootPath);
                 XmlNodeList nodelist = memberlist.ChildNodes;

                 //添加一個帶有屬性的節點信息
                 foreach (XmlNode node in nodelist)
                 {
                     if (node.Attributes[FirstElementattributesName].Value.Equals(Firstattributes))
                     {
                         for (int i = 0; i < SecondElement.Length; i++)
                         {
                             XmlElement newElement = myXmlDoc.CreateElement(SecondElement[i]);
                             newElement.InnerText = SecondinnerText[i];
                             node.AppendChild(newElement);
                         }
                     }
                 }
                 //保存更改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }


        /// <summary>
        /// 獲取第一層節點的屬性值,返回所有的屬性名和對應的值
        /// </summary>
        /// <param name="xmlFilePath">文件路徑</param>
        /// <param name="RootPath">根節點名</param>
        /// <param name="firstNodeName">第一層節點名</param>
        /// <returns></returns>
        public ArrayList GetXMLFirstNodeAttributes(string xmlFilePath, string RootPath, string firstNodeName)
         {
             ArrayList list = new ArrayList();
             try
             {
                 //初始化一個xml實例
                 XmlDocument myXmlDoc = new XmlDocument();
                 //加載xml文件(參數為xml文件的路徑)
                 myXmlDoc.Load(xmlFilePath);
                 //獲得第一個姓名匹配的節點(SelectSingleNode):此xml文件的根節點
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 //分別獲得該節點的InnerXml和OuterXml信息
                 string innerXmlInfo = rootNode.InnerXml.ToString();
                 string outerXmlInfo = rootNode.OuterXml.ToString();
                 //獲得該節點的子節點(即:該節點的第一層子節點)
                 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 foreach (XmlNode node in firstLevelNodeList)
                 {
                     //獲得該節點的屬性集合
                     if (node.Name == firstNodeName)
                     {
                         XmlAttributeCollection attributeCol = node.Attributes;
                         foreach (XmlAttribute attri in attributeCol)
                         {
                             //獲取屬性名稱與屬性值
                             string name = attri.Name;
                             string value = attri.Value;
                             list.Add(name + ":" + value);
                         }
                     }
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
             return list;
         }


        /// <summary>
        /// 獲取第二層節點的存儲值
        /// </summary>
        /// <param name="xmlFilePath">文件路徑</param>
        /// <param name="RootPath">根節點</param>
        /// <param name="firstNodeName">第一層節點名</param>
        /// <param name="secondNoadeName">第二層節點名</param>
        /// <returns></returns>
        public ArrayList GetXMLSecondNodeValue(string xmlFilePath, string RootPath, string firstNodeName, string secondNoadeName)
         {
             ArrayList list = new ArrayList();
             try
             {
                 //初始化一個xml實例
                 XmlDocument myXmlDoc = new XmlDocument();
                 //加載xml文件(參數為xml文件的路徑)
                 myXmlDoc.Load(xmlFilePath);
                 //獲得第一個姓名匹配的節點(SelectSingleNode):此xml文件的根節點
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 //分別獲得該節點的InnerXml和OuterXml信息
                 string innerXmlInfo = rootNode.InnerXml.ToString();
                 string outerXmlInfo = rootNode.OuterXml.ToString();
                 //獲得該節點的子節點(即:該節點的第一層子節點)
                 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 foreach (XmlNode node in firstLevelNodeList)
                 {
                     //獲得該節點的屬性集合
                     if (node.Name == firstNodeName)
                     {
                         foreach (XmlNode _node in node.ChildNodes)
                         {
                             if (_node.Name == secondNoadeName)
                                 list.Add(_node.InnerText);
                         }
                     }

                     //判斷此節點是否還有子節點
                     if (node.HasChildNodes)
                     {
                         //獲取該節點的第一個子節點
                         XmlNode secondLevelNode1 = node.FirstChild;
                         //獲取該節點的名字
                         string name = secondLevelNode1.Name;
                         //獲取該節點的值(即:InnerText)
                         string innerText = secondLevelNode1.InnerText;
                         Console.WriteLine("{0} = {1}", name, innerText);

                         //獲取該節點的第二個子節點(用數組下標獲取)
                         XmlNode secondLevelNode2 = node.ChildNodes[1];
                         name = secondLevelNode2.Name;
                         innerText = secondLevelNode2.InnerText;
                         Console.WriteLine("{0} = {1}", name, innerText);
                     }
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
             return list;
         }


        /// <summary>
        /// 修改第一層節點的屬性值
        /// </summary>
        /// <param name="xmlFilePath">文件路徑</param>
        /// <param name="RootPath">根節點名</param>
        /// <param name="FirstNodeName">第一節點名</param>
        /// <param name="FirstNodeAttributes">第一節點屬性名</param>
        /// <param name="FirstNodeAttributesOldValue">第一節點屬性值</param>
        /// <param name="newValue"></param>
        public void ModifyXmlFirstattribute(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesOldValue, string newValue)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 //XmlNode rootNode = myXmlDoc.FirstChild;
                 //XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         //修改此節點的屬性值
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesOldValue))
                         {
                             node.Attributes[FirstNodeAttributes].Value = newValue;
                         }
                     }
                 }
                 //要想使對xml文件所做的修改生效,必須執行以下Save方法
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

       
        /// <summary>
        /// 修改第二節點的存儲值
        /// </summary>
        /// <param name="xmlFilePath">文件路徑</param>
        /// <param name="RootPath">根節點名字</param>
        /// <param name="FirstNodeName">第一節點名字</param>
        /// <param name="FirstNodeAttributes">第一節點屬性名</param>
        /// <param name="FirstNodeAttributesValue">第一節點屬性值</param>
        /// <param name="SecondNodeName">第二節點名字</param>
        /// <param name="value">第二節點存儲值</param>
        public void ModifyXmlElementValue(string xmlFilePath, string RootPath, string FirstNodeName,string FirstNodeAttributes, string FirstNodeAttributesValue, string SecondNodeName, string value)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         //修改此節點的屬性值
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             foreach (XmlNode _node in node.ChildNodes)
                             {
                                 if (_node.Name == SecondNodeName)
                                 {
                                     _node.InnerText = value;
                                 }
                             }
                         }
                     }
                 }
                 //要想使對xml文件所做的修改生效,必須執行以下Save方法
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

 

        /// <summary>
        /// 刪除第一節點
        /// </summary>
        /// <param name="xmlFilePath">路徑</param>
        /// <param name="RootPath">根節點</param>
        /// <param name="FirstNodeName">第一節點名</param>
        /// <param name="FirstNodeAttributes">第一節點屬性名</param>
        /// <param name="FirstNodeAttributesValue">第一節點屬性值</param>
        public void DeleteXmlFirstnode(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesValue)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);

                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             //node.RemoveAll();
                             rootNode.RemoveChild(node);
                         }
                     }
                 }
                 //保存對xml文件所做的修改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

        /// <summary>
         /// 刪除子節點
        /// </summary>
        /// <param name="xmlFilePath">路徑</param>
        /// <param name="FirstElementattributesName">第一節點屬性名</param>
        /// <param name="Firstattributes">第一節點屬性值</param>
        /// <param name="secondnodeName">子節點名稱</param>
        public void DeleteXmlsecondNode(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesValue, string secondnodeName)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);

                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             foreach (XmlNode _node in node.ChildNodes)
                             {
                                 if (_node.Name == secondnodeName)
                                     //_node.RemoveAll();
                                     node.RemoveChild(_node);

                             }
                         }
                     }
                 }
                 //保存對xml文件所做的修改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }


    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM