天天看點

C# xml檔案的建立,修改和添加節點

最近在做一個項目,設計到xml檔案的傳輸,是以就研究了一下。

,.NET Framework完全支援XML DOM模式,但它不支援SAX模式。.NET Framework支援兩種不同的分析模式:XML DOM分析器(XMLDocument類)和XML閱讀器(XMLTextReader類),不支援SAX分析器, 但這并不意味着它沒有提供類似SAX分析器的功能。通過XML閱讀器可以将SAX的所有的功能很容易的實作及更有效的運用。

但是我們一般運用最多的是DOM。

一、建立xml檔案

        using System.Xml;

        using System.IO;//這個一定要寫

         XmlDocument xmlDoc = new XmlDocument();

            //加入XML的聲明段落,Save方法不再xml上寫出獨立屬性

            xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));

           //加入根元素

            XmlElement root = xmlDoc.CreateElement("ROOT");

            xmlDoc.AppendChild(root);

            XmlElement memberlist = xmlDoc.CreateElement("MEMBERLIST");

            XmlElement memberA = xmlDoc.CreateElement("MEMBER");

            memberA.SetAttribute("AGE", ">=29");

            memberA.SetAttribute("SEX", "MALE");

            XmlElement zs = xmlDoc.CreateElement("NAME");

            zs.InnerText = "張三";

            XmlElement ls = xmlDoc.CreateElement("NAME");

            ls.InnerText = "李四";

            memberA.AppendChild(zs);

            memberA.AppendChild(ls);

            XmlElement memberB = xmlDoc.CreateElement("MEMBER");

            memberB.SetAttribute("AGE", ">=35");

            memberB.SetAttribute("SEX", "MALE");

            XmlElement ww = xmlDoc.CreateElement("NAME");

            ww.InnerText = "王五";

            XmlElement zl = xmlDoc.CreateElement("NAME");

            zl.InnerText = "趙六";

            memberB.AppendChild(ww);

            memberB.AppendChild(zl);

            memberlist.AppendChild(memberA);

            memberlist.AppendChild(memberB);

            root.AppendChild(memberlist);

            xmlDoc.Save(xmlpath);            

效果如下:

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>      <MEMBERLIST>             <MEMBERAGE=">=29"SEX="MALE">                       <NAME>李四</NAME>                  *   <NAME/>                            </MEMBER>             <MEMBERAGE=">=35"SEX="MALE">                         <NAME>王五</NAME>                         <NAME>趙六</NAME>            </MEMBER>     </MEMBERLIST> </ROOT> 看上面成功倒是成功了,不過由于粗心,在*這行的NAME标簽出錯了。我想把第一個NAME改為張三,第二個NAME改為李四 二、修改xml檔案

  c#代碼如下:  XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(xmlpath);

            XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");

            XmlNodeList nodelist=memberlist.ChildNodes;

           // XmlNodeList nodelist=xmlDoc.GetElementsByTagName("MEMBER");

            foreach (XmlNode node in nodelist)

            {

                if (node.Attributes["AGE"].InnerText.ToString().Equals(">=29"))

                {

                    node.ChildNodes[0].InnerText = "張三";

                    node.ChildNodes[1].InnerText = "李四";

                    break;

                }

            }

            xmlDoc.Save(xmlpath);

            MessageBox.Show("儲存成功"); xml效果如下: <?xml version="1.0" encoding="UTF-8"?> <ROOT>      <MEMBERLIST>             <MEMBERAGE=">=29"SEX="MALE">                       <NAME>張三</NAME>                       <NAME>李四</NAME>                            </MEMBER>             <MEMBERAGE=">=35"SEX="MALE">                         <NAME>王五</NAME>                         <NAME>趙六</NAME>              </MEMBER>          </MEMBERLIST>   </ROOT> 這時候,如果增加人員的情況下,我還需要添加節點。 三、xml檔案添加節點如下 c#代碼如下  XmlDocument xmlDoc = new XmlDocument();

            if (File.Exists(xmlpath))

            {

                xmlDoc.Load(xmlpath);

                XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");

                XmlElement member = xmlDoc.CreateElement("MEMBER");

                member.SetAttribute("AGE", "<29");

                member.SetAttribute("SEX", "MAIL");

                XmlElement lq = xmlDoc.CreateElement("NAME");

                lq.InnerText = "六七";

                member.AppendChild(lq);

                memberlist.AppendChild(member);

                xmlDoc.Save(xmlpath);

                MessageBox.Show("添加成功");

            }

            else

            {

                MessageBox.Show("檔案不存在");

            } 效果如下: <<ROOT>      <MEMBERLIST>             <MEMBERAGE=">=29"SEX="MALE">                      <NAME>張三</NAME>                      <NAME>李四</NAME>                            </MEMBER>             <MEMBERAGE=">=35"SEX="MALE">                        <NAME>王五</NAME>                        <NAME>趙六</NAME>              </MEMBER>         <MEMBERAGE="<29" SEX="MALE">                        <NAME>六七</NAME>              </MEMBER>          </MEMBERLIST> < </ROOT>   有幾點要記住了,XmlNode包含XmlElement,即XmlNode可以轉化為XmlElement而XmlElement不可以轉化為XmlNode. xmDoc.selectSingleNode("節點名稱").這個節點名稱是他的路徑。若是根節點當時隻寫名稱就可以了,若是子節點,則需要些明從根節點到它的路徑。   再就是周遊xml檔案,這個就不記錄了,上面這些操作會了,周遊就不是問題了。