欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#讀寫xml文件方法總結(jié)(超詳細(xì)!)

 更新時間:2023年02月21日 11:33:24   作者:薪薪代碼  
項目中用到關(guān)于xml文件讀寫操,所以下面這篇文章主要給大家介紹了關(guān)于C#讀寫xml文件方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

C#寫入xml文件

1、XmlDocument

1。我認(rèn)為是最原始,最基本的一種:利用XmlDocument向一個XML文件里寫節(jié)點,然后再利用XmlDocument保存文件。
首先加載要寫入的XML文件,但是如果沒有的,就要新建,在新建的過程中,要有寫入的代碼;

XmlDocument doc = new XmlDocument();
            try
            {
                doc.Load("new.xml");
            }
            catch
            {
                XmlTextWriter xtw = new XmlTextWriter("new.xml", Encoding.UTF8);
                //新建XML文件        
                xtw.WriteStartDocument();
                xtw.WriteStartElement("gnode");
                // gnode根節(jié)點                 
                xtw.WriteStartElement("myxm1");
                // gnode根節(jié)點下的元素myxmls             
                xtw.WriteEndElement();
                xtw.WriteEndElement();
                xtw.WriteEndDocument();
                xtw.Close();
                doc.Load("new.xml");
            }
            XmlNode xn = doc.DocumentElement;
            //找到根節(jié)點     
            XmlElement xe = doc.CreateElement("myxml2");
            //在根節(jié)點下創(chuàng)建元素,如果是屬性,則用XmlAttribute; 
            xe.InnerText = "薪薪代碼hahaha";
            //給子節(jié)點寫入文本節(jié)點(值)     
            xn.AppendChild(xe);
            //根節(jié)點將其納入         
            doc.Save("new2.xml");
            //利用XmlDocument保存文件
        }

注意點:在新建根節(jié)點的時候,WriteStartElement,只能嵌套,也就是只能有一個根節(jié)點。

2、DataSet對象里的值來生成XML文件

應(yīng)用到數(shù)據(jù)庫,將數(shù)據(jù)庫的DataSet對象里的值來生成XML文件的元素;

using (SqlConnection con = new SqlConnection("Server=.;DataBase=HGSTUDY;uid=sa;pwd=yao"))
            {
                con.Open();
                SqlCommand command = new SqlCommand("select * from GL_STUDY", con);
                command.CommandType = CommandType.Text;
                DataSet ds = new DataSet("DATASET");
                //DATASET將成為XML文件中的根節(jié)點名稱,否則系統(tǒng)將其命名為NewDataSet      
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = command;
                sda.Fill(ds, "DATATABLE");
                //DATATABLE為所生成XML文件中的子節(jié)點名稱,否則系統(tǒng)將其命名為Table。   
                ds.WriteXml("dbxml.xml");
                // DataSet的方法WriteXml將數(shù)據(jù)寫入到XML文件,就是這么一句話。如果不保存到文件,直接ds.GetXML()      
            }

3、利用XmlSerializer來將類的屬性值轉(zhuǎn)換為XML文件的元素值。

用一個字符串作為一個XML文檔中的xmlAttribute或xmlElement。[其元素或?qū)傩杂深惖亩x來設(shè)置(xml串行化)]

using System;System.xml.Serialization;

先初始化一個類,設(shè)置屬性值

var xmlDoc = new XmlDocument();
//Create the xml declaration first
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
//Create the root node and append into doc
var el = xmlDoc.CreateElement("Contacts");
xmlDoc.AppendChild(el);
// Contact
XmlElement elementContact = xmlDoc.CreateElement("Contact");
XmlAttribute attrID = xmlDoc.CreateAttribute("id");
attrID.Value = "01";
elementContact.Attributes.Append(attrID);
el.AppendChild(elementContact);
// Contact Name
XmlElement elementName = xmlDoc.CreateElement("Name");
elementName.InnerText = "Daisy Abbey";
elementContact.AppendChild(elementName);
// Contact Gender
XmlElement elementGender = xmlDoc.CreateElement("Gender");
elementGender.InnerText = "female";
elementContact.AppendChild(elementGender);
xmlDoc.Save("test1.xml");

建XmlSerializer實例

class XXX {  
               XmlSerializer ser = new XmlSerializer(Type.GetType("forxml.truck"));   
               Truck tr = new Truck();     
               tr.ID = 1;    
               tr.cheID = "贛A T34923";
           }

Serialize方法–完成對類的串行化

XmlTextWriter xtw = new XmlTextWriter("myxml.xml",Encoding.UTF8); 

        用XmlTextWriter 創(chuàng)建一個XML文件   
         ser.Serialize(xtw, tr);      
         //如果只想顯示,可以直接ser.Serialize(Console.Out, tr);
}

xml常用方法:
定義xml文檔:XmlDocument xmlDoc = new XmlDocument();
初始化xml文檔:xmlDoc.Load(“D:\book.xml”);//找到xml文件
創(chuàng)建根元素:XmlElement xmlElement = xmlDoc.CreateElement(“”, “Employees”, “”);
創(chuàng)建節(jié)點:XmlElement xeSub1 = xmlDoc.CreateElement(“title”);
查找Employees節(jié)點:XmlNode root = xmlDoc.SelectSingleNode(“Employees”);
添加節(jié)點:xe1.AppendChild(xeSub1);
更改節(jié)點的屬性:xe.SetAttribute(“Name”, “李明明”);
移除xe的ID屬性:xe.RemoveAttribute(“ID”);
刪除節(jié)點title:xe.RemoveChild(xe2);

示例:寫入xml

1、創(chuàng)建xml文檔

public void CreateXMLDocument()
{
    XmlDocument xmlDoc = new XmlDocument();          
//加入XML的聲明段落,<?xml version="1.0" encoding="gb2312"?>
    XmlDeclaration xmlDeclar;
    xmlDeclar = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
    xmlDoc.AppendChild(xmlDeclar);          

//加入Employees根元素
    XmlElement xmlElement = xmlDoc.CreateElement("", "Employees", "");
    xmlDoc.AppendChild(xmlElement);        

//添加節(jié)點
    XmlNode root = xmlDoc.SelectSingleNode("Employees");
    XmlElement xe1 = xmlDoc.CreateElement("Node");
    xe1.SetAttribute("Name", "薪薪代碼");
    xe1.SetAttribute("ISB", "2-3631-4");        

//添加子節(jié)點
    XmlElement xeSub1 = xmlDoc.CreateElement("title");
    xeSub1.InnerText = "學(xué)習(xí)VS";
    xe1.AppendChild(xeSub1);

    XmlElement xeSub2 = xmlDoc.CreateElement("price");
    xe1.AppendChild(xeSub2);
    XmlElement xeSub3 = xmlDoc.CreateElement("weight");
    xeSub3.InnerText = "20";
    xeSub2.AppendChild(xeSub3);

    root.AppendChild(xe1);
    xmlDoc.Save("D:\\book.xml");//保存的路徑
}

生成的xml文件如下:

<?xml version="1.0" encoding="GB2312"?>
-<Employees>-
  <Node ISB="2-3631-4" Name="薪薪代碼">
    <title>學(xué)習(xí)VS</title>-
    <price>
      <weight>20</weight>
    </price>
  </Node>
</Employees>

2 、增加節(jié)點

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:\\book.xml");//找到xml文件
XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找Employees節(jié)點
XmlElement xe1 = xmlDoc.CreateElement("Node2");//添加Node2節(jié)點
xe1.SetAttribute("Name", "張飛");
XmlElement xeSub1 = xmlDoc.CreateElement("title");//定義子節(jié)點
xeSub1.InnerText = "心情好";
xe1.AppendChild(xeSub1);//添加節(jié)點到Node2
root.AppendChild(xe1);//添加節(jié)點到Employees
xmlDoc.Save("D:\\book.xml");

結(jié)果:

<?xml version="1.0" encoding="GB2312"?>
  -<Employees>
    -<Node ISB="2-3631-4" Name="薪薪代碼">
      <title>學(xué)習(xí)VS</title>-
      <price>
        <weight>20</weight>
      </price>
    </Node>-
    <Node2 Name="張三">
      <title>心情好</title>
    </Node2>-
    <Node2 Name="張三">
      <title>心情好</title>
    </Node2>
</Employees>

3 、修改節(jié)點:

public void ModifyNode()
{
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load("D:\\book.xml");
    XmlNodeList nodeList = xmlDocument.SelectSingleNode("Employees").ChildNodes;//獲取Employees節(jié)點的所有子節(jié)點

    foreach (XmlNode xn in nodeList)//遍歷
    {
 XmlElement xe = (XmlElement)xn;
 if (xe.GetAttribute("Name") == "薪薪代碼")
 {
     xe.SetAttribute("Name", "薪薪");//更改節(jié)點的屬性

     XmlNodeList xnl = xe.ChildNodes;//獲取xe的所有子節(jié)點
     foreach (XmlNode xn1 in xnl)
     {
  XmlElement xe2 = (XmlElement)xn1;//將節(jié)點xn1的屬性轉(zhuǎn)換為XmlElement
  if (xe2.Name == "title")//找到節(jié)點名字為title的節(jié)點
  {
      xe2.InnerText = "今天天氣不好";
  }

  if (xe2.Name == "price")
  {
      XmlNodeList xnl2 = xe2.ChildNodes;
      foreach (XmlNode xn2 in xnl2)
      {
   if (xn2.Name == "weight")
   {
       xn2.InnerText = "88";
   }
      }
  }
     }
 }
    }

    xmlDocument.Save("D:\\book2.xml");
}

運行結(jié)果:

<?xml version="1.0" encoding="GB2312"?>
-<Employees>
-<Node ISB="2-3631-4" Name="薪薪">
<title>今天天氣不好</title>-<price>
<weight>88</weight>
</price>
</Node>
-<Node2 Name="張三">
<title>心情好</title>
</Node2></Employees>

4 、刪除節(jié)點

public void DeleteNode()
{
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load("D:\\book1.xml");
    XmlNodeList xnl = xmlDocument.SelectSingleNode("Employees").ChildNodes;

    foreach (XmlNode xn in xnl)
    {
 if (xn.Name == "Node")
 {
     XmlElement xe = (XmlElement)xn;//將xn的屬性轉(zhuǎn)換為XmlElement
     xe.RemoveAttribute("ID");//移除xe的ID屬性
     XmlNodeList xnl2 = xe.ChildNodes;
     for (int i = 0; i < xnl2.Count; i++)
     {
  XmlElement xe2 = (XmlElement)xnl2.Item(i);
  if (xe2.Name == "title")
  {
      xe.RemoveChild(xe2);//刪除節(jié)點title
  }
     }
 }
    }
    xmlDocument.Save("D:\\book3.xml");
}

結(jié)果:

<?xml version="1.0" encoding="GB2312"?>
-<Employees>
-<Node ISB="2-3631-4" Name="薪薪">-<price>
<weight>20</weight>
</price>
</Node>-
<Node2 Name="張三">
<title>心情好</title>
</Node2>-
<Node2 Name="張三">
<title>心情好</title>
</Node2>
</Employees>

c#讀取xml文件

xml文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configurationN>
    <ServerAddress>1143</ServerAddress>
    <ID>192.168</ID>
  </configurationN>

在寫入xml文件時,最主要使用了兩個方法:Load和Save。

Load:初始化xml文檔,以便項目文件獲取具體的xml節(jié)點的值。

public void Load(string path)
{
    try
    {
 XmlDocument xmlDocument = new XmlDocument();
 xmlDocument.Load(path);
 XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
 foreach (XmlNode xn in xnl)
 {
     if (xn.Name == configuration_ServerAddress)
     {
  ServerAddress = xn.InnerText;
     }
 }
    }
    catch(Exception ex)
    { }
}

Save:在項目系統(tǒng)中進行修改配置文件值后,需要對xml進行重新保存

public void Save(string path)
{
    try
    {
 XmlDocument xmlDocument = new XmlDocument();
 xmlDocument.Load(path);
 XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
 foreach (XmlNode xn in xnl)
 {
     if (xn.Name == configuration_ServerAddress)
     {
  xn.InnerText = ServerAddress;
     }
 }

 xmlDocument.Save(path);
    }
    catch (Exception ex)
    { }
}

此處將所有代碼都貼出來,方便下次實現(xiàn)。因為項目是WPF文件,而且都是簡單控件,所以只貼出后臺代碼。

class ConfigurationManager:INotifyPropertyChanged
{
        public const string managerNode = "configurationN";//根節(jié)點
        public const string configuration_ServerAddress = "ServerAddress";//子節(jié)點
        private string _ServerAddress;
        public string ServerAddress
        {
            get { return _ServerAddress; }
            set
            {
                _ServerAddress = value;
                NotifyPropertyChanged("ServerAddress");
            }
        }

        public void Load(string path)
        {
            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(path);

                XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
                foreach (XmlNode xn in xnl)
                {
                    if (xn.Name == configuration_ServerAddress)
                    {
                        ServerAddress = xn.InnerText;
                    }
                }
            }
            catch(Exception ex)
            { }
        }

        public void Save(string path)
        {
            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(path);

                XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
                foreach (XmlNode xn in xnl)
                {
                    if (xn.Name == configuration_ServerAddress)
                    {
                        xn.InnerText = ServerAddress;
                    }
                }

                xmlDocument.Save(path);
            }
            catch (Exception ex)
            { }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public static ConfigurationManager Instance = new ConfigurationManager();
}

public partial class MainWindow : Window
{
        public MainWindow()
        {
            InitializeComponent();
            Start();
            this.tb1.Text = ConfigurationManager.Instance.ServerAddress.ToString();

        }
        private string path = "CONFIG\\System.xml";

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ConfigurationManager.Instance.ServerAddress = this.tb1.Text;
            ConfigurationManager.Instance.Save(path);
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void Start()
        {
            ConfigurationManager.Instance.Load(path);
        }
}

總結(jié)

到此這篇關(guān)于C#讀寫xml文件方法的文章就介紹到這了,更多相關(guān)C#讀寫xml文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#泛型和反射實例解析

    C#泛型和反射實例解析

    這篇文章主要介紹了C#泛型和反射實例解析,對于C#初學(xué)者理解泛型和反射有很好的幫助借鑒作用,需要的朋友可以參考下
    2014-08-08
  • C# SendInput 模擬鼠標(biāo)操作的實現(xiàn)方法

    C# SendInput 模擬鼠標(biāo)操作的實現(xiàn)方法

    C# SendInput 模擬鼠標(biāo)操作的實現(xiàn)方法,需要的朋友可以參考一下
    2013-04-04
  • [C#].NET中幾種Timer的使用實例

    [C#].NET中幾種Timer的使用實例

    本篇文章主要介紹了.NET中幾種Timer的使用,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • c#基礎(chǔ)系列之System.String的深入理解

    c#基礎(chǔ)系列之System.String的深入理解

    這篇文章主要給大家介紹了關(guān)于c#基礎(chǔ)系列之System.String的深入理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 解決Unity無限滾動復(fù)用列表的問題

    解決Unity無限滾動復(fù)用列表的問題

    這篇文章主要介紹了Unity無限滾動復(fù)用列表,無限滾動復(fù)用ScrollView就是解決這種問題,還可以用來做朋友圈,聊天等,需要的朋友可以參考下
    2022-04-04
  • C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    本文一介紹了數(shù)據(jù)結(jié)構(gòu)的基本概念 而介紹了算法的基本概念,并且重點討論了算法時間復(fù)雜度,并且用程序予以證明
    2012-10-10
  • C#并行編程之Task任務(wù)

    C#并行編程之Task任務(wù)

    這篇文章介紹了C#并行編程之Task任務(wù),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 詳解C#中==、Equals、ReferenceEquals的區(qū)別

    詳解C#中==、Equals、ReferenceEquals的區(qū)別

    C#中Equals , == , ReferenceEquals都可以用于判斷兩個對象的個體是不是相等,本篇文章詳解C#中Equals , == , ReferenceEquals都可以用于判斷兩個對象的個體是不是相等,有興趣的可以了解一下。
    2016-12-12
  • C#虛函數(shù)用法實例分析

    C#虛函數(shù)用法實例分析

    這篇文章主要介紹了C#虛函數(shù)用法,實例分析了C#中虛函數(shù)的功能與基本使用技巧,需要的朋友可以參考下
    2015-07-07
  • 關(guān)于C#調(diào)用C++dll傳指針釋放內(nèi)存問題

    關(guān)于C#調(diào)用C++dll傳指針釋放內(nèi)存問題

    這篇文章主要介紹了關(guān)于C#調(diào)用C++dll傳指針釋放內(nèi)存問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論