最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中讀取XML文件的四種常用方法

 更新時間:2025年02月21日 09:38:34   作者:嘿嘿潶黑黑  
Xml是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具,下面我們就來看看C#中讀取XML文件的方法都有哪些吧

XML

簡介

Xml是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進制數(shù)據(jù)要占用更多的空間,但XML極其簡單易于掌握和使用。

格式

實例:

文件名:test.xml

<?xml version="1.0" encoding="UTF-8"?>
<notes>
    <note Type="1">
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
    <note Type="2">
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
</notes>

c#讀取XML文件方法

使用XmlDocument

使用XmlDocument是一種基于文檔結(jié)構(gòu)模型的方式來讀取XML文件.在XML文件中,我們可以把XML看作是由文檔聲明(Declare),元素(Element),屬性(Attribute),文本(Text)等構(gòu)成的一個樹.最開始的一個結(jié)點叫作根結(jié)點,每個結(jié)點都可以有自己的子結(jié)點.得到一個結(jié)點后,可以通過一系列屬性或方法得到這個結(jié)點的值或其它的一些屬性.例如:

  •  xn 代表一個結(jié)點
  •  xn.Name;//這個結(jié)點的名稱 
  •  xn.Value;//這個結(jié)點的值 
  •  xn.ChildNodes;//這個結(jié)點的所有子結(jié)點 
  •  xn.ParentNode;//這個結(jié)點的父結(jié)點 
  •  .......

操作

//聲明XmlDocument對象,并加載XML文件
XmlDocument doc = new XmlDocument();
doc.Load(@"test.xml"); //此處為XML文件的路徑

#region 獲取節(jié)點
//得到根節(jié)點node
XmlNode xn = doc.SelectSingleNode("notes");
//得到根節(jié)點的所有子節(jié)點
XmlNodeList xnl = xn.ChildNodes;

foreach (XmlNode xNode in xnl)
{
    //將節(jié)點轉(zhuǎn)換為元素,便于得到節(jié)點的屬性值
    XmlElement xe = (XmlElement)xNode;
    //得到note節(jié)點的屬性值
    string noteType = xe.GetAttribute("Type").ToString();
    //得到note節(jié)點的所有子節(jié)點
    XmlNodeList xnl0 = xe.ChildNodes;
    string body = xnl0.Item(3).InnerText;
    //修改節(jié)點值
    xnl0.Item(0).InnerText = "Tovv";
}
#endregion

#region 增加節(jié)點 -- 以下是追加
//創(chuàng)建一個節(jié)點,并設(shè)置節(jié)點的屬性
XmlElement xelKey = doc.createElement_x("note");
XmlAttribute xelType = doc.CreateAttribute("Type");
xelType.InnerText = "3";
xelKey.SetAttributeNode(xelType);
//創(chuàng)建子節(jié)點
XmlElement xelAuthor = doc.createElement_x("to");
xelAuthor.InnerText = "Tang";
xelKey.AppendChild(xelAuthor);
//note,并保存整個文件
xn.AppendChild(xelKey);
doc.Save(@"..\..\Book.xml");
#endregion
    
#region 增加節(jié)點 -- 以下是覆蓋
XmlDocument doc = new XmlDocument();
doc.LoadXml("<notes></notes>");//用這句話,會把以前的數(shù)據(jù)全部覆蓋掉,只有你增加的數(shù)據(jù)
#endregion

#region 刪除節(jié)點
XmlElement xe = xmlDoc.DocumentElement; 
string strPath = string.Format("/notes/notes[@Type=\"{0}\"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString());
XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根據(jù)XPath表達式,獲得符合條件的第一個節(jié)點. 
selectXe.ParentNode.RemoveChild(selectXe); //移除節(jié)點
#endregion

注意

當(dāng)XML文件中含有注釋時,則會出錯,因為注釋也是一種結(jié)點類型,在沒有特別說明的情況下,會默認它也是一個結(jié)點(Node).所以在把結(jié)點轉(zhuǎn)換成元素的時候就會報錯.“無法將類型為“System.Xml.XmlComment”的對象強制轉(zhuǎn)換為類型“System.Xml.XmlElement”。”

解決方法:

XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文檔里面的注釋 
XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);
xmlDoc.Load(reader);

//最后讀取完畢后,記得要關(guān)掉reader
reader.Close();

使用XmlTextReader/XmlTextWriter

使用XmlTextReader讀取數(shù)據(jù)的時候,首先創(chuàng)建一個流,然后用read()方法來不斷的向下讀,根據(jù)讀取的結(jié)點的類型來進行相應(yīng)的操作.

操作

//使用XmlTextReader讀文件
XmlTextReader reader = new XmlTextREADER(@"test.xml");

while(reader.Read())
{
    if(reader.NodeType == XmlNodeType.Element)
    {
        //讀取節(jié)點屬性
        if(reader.Name == "note")
        {
            //第一種方法
            string nodeType = reader.GetAttribute(0);
            
            //另一種方法
            for(int i = 0; i < reader.AttributeCount; i++)
            {
                reader.MoveToAttribute(i);
                string str = "屬性:" + reader.Name + "=" + reader.Value;
            }
        }
        //讀取節(jié)點的值
        if(reader.Name == "to")
        {
        	string nodeTo = reader.ReadElementString().Trim();    
        }
        if(reader.Name == "from")
        {
            string nodeFrom = reader.ReadElementString().Trim();
        }
        //當(dāng)節(jié)點類型為尾節(jié)點時
        if(reader.NodeType == XmlNodeType.EndElement)
        {
            
        }
    }
}

reader.Close(); //關(guān)閉讀文件流


//使用XmlTextWriter寫文件
//XmlTextWriter寫文件的時候,默認是覆蓋以前的文件,如果此文件名不存在,它將創(chuàng)建此文件
XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"test.xml", null);
//使用 Formatting 屬性指定希望將 XML 設(shè)定為何種格式。 這樣,子元素就可以通過使用 Indentation 和 IndentChar 屬性來縮進。 
myXmlTextWriter.Formatting = Formatting.Indented;

myXmlTextWriter.WriteStartDocument(false);
myXmlTextWriter.WriteStartElement("notes"); //寫入notes的起始節(jié)點

myXmlTextWriter.WriteComment("note information"); //寫入注釋
myXmlTextWriter.WriteStartElement("note"); //寫入note的起始節(jié)點

myXmlTextWriter.WriteAttributeString("Type", "3"); //寫入note節(jié)點的屬性

myXmlTextWriter.WriteElementString("to","hong"); //寫入note子節(jié)點

myXmlTextWriter.WriteEndElement(); //寫入note的尾節(jié)點
myXmlTextWriter.WriteEndElement(); //寫入notes的尾節(jié)點

myXmlTextWriter.Flush(); //結(jié)束寫入
myXmlTextWriter.Close(); //關(guān)閉寫入流

使用Linq to Xml

Linq是C#3.0中出現(xiàn)的一個新特性,使用它可以方便的操作許多數(shù)據(jù)源,也包括XML文件.使用Linq操作XML文件非常的方便,而且也比較簡單

操作

XElement xe = XElement.Load(@"test.xml");

#region 讀取數(shù)據(jù)
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;

foreach(var ele in elements)
{
    //獲取節(jié)點的屬性
	string nodeType = ele.Attribute("Type").Value;
    //獲取節(jié)點的子節(jié)點值
    string nodeTo = ele.Element("to").Value;
}
#endregion

#region 插入數(shù)據(jù)
XElement record = new XElement(
	new XElement("note",
                 new XAttribute("Type", "3"),
                 new XElement("to", "tang"),
                 new XElmeent("from", "hong")
                )
);
xe.Add(record);
xe.Save(@"test.xml");
#endregion
    
#region 刪除數(shù)據(jù)
//刪除選中的數(shù)據(jù)
IEnumerable<XElement> elements = from ele in xe.Elements("note")
    where (string)ele.Attribute("Type") == 1
    select ele;

if(elements.Count() > 0)
    elements.First().Remove();

xe.Save(@"test.xml");

//刪除所有的數(shù)據(jù)
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;

if(elements.Count() > 0)
    elements.Remove();

xe.Save(@"test.xml");
#endregion

#region 修改數(shù)據(jù)
IEnumerable<XElement> elements = from ele in xe.Elements("note")
    where (string)ele.Attribute("Type") == 1
    select ele;

if(elements.Count() > 0)
{
    XElement first = elements.First();
    //設(shè)置新的屬性
    first.SetAttributeValue("Type", 5);
    //替換新的節(jié)點
    first.ReplaceNodes(
        new XElement("to", "tangtang"),
        new XElmeent("from", "hong")
    );
}
xe.Save(@"test.xml");
#endregion

使用DataSet

ADO.NET對XML提供了強大的支持,其主要事通過數(shù)據(jù)集與XML進行交互。

操作

DataSet ds = new DataSet();
//讀取文件
ds.ReadXml(@"test.xml");

//顯示數(shù)據(jù)
string nodeTo = ds.Tables[0].Rows[0]["to"];
//修改數(shù)據(jù)
ds.Talbes[0].Rows[0]["to"] = "tos";
//插入數(shù)據(jù)
DataRow dr = ds.Tables[0].NewRow();
dr["to"] = "dsds";
dr["from"] = "wang";
ds.Tables[0].Rows.Add(dr);
//刪除數(shù)據(jù)
DataRow delR = ds.Tables[0].Rows[0];
ds.Tables[0].Rows.Remove(delR);

//保存數(shù)據(jù)
ds.WriteXml(@"test.xml");

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

相關(guān)文章

  • C#中BackgroundWorker類用法總結(jié)

    C#中BackgroundWorker類用法總結(jié)

    本文詳細講解了C#中BackgroundWorker類用法總結(jié),文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 基于C#實現(xiàn)的UPnP端口映射程序

    基于C#實現(xiàn)的UPnP端口映射程序

    本文介紹了基于C#實現(xiàn)的UPnP端口映射程序,該程序包含服務(wù)器端和客戶端,支持TCP端口穿透和自動NAT穿透,服務(wù)器端實現(xiàn)UPnP端口映射和TCP服務(wù)端,客戶端實現(xiàn)UPnP客戶端類,程序支持多協(xié)議、自動重連機制和安全增強,需要的朋友可以參考下
    2026-02-02
  • C#基礎(chǔ)知識之base關(guān)鍵字介紹

    C#基礎(chǔ)知識之base關(guān)鍵字介紹

    本文主要介紹base關(guān)鍵字的使用方法,base關(guān)鍵字可以調(diào)用基類重寫的方法,可以調(diào)用基類的構(gòu)造方法,還可以在EntityFramework中使用,下面一一介紹。
    2016-04-04
  • c# 如何實現(xiàn)不同進程之間的通信

    c# 如何實現(xiàn)不同進程之間的通信

    這篇文章主要介紹了c# 如何實現(xiàn)不同進程之間的通信,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-11-11
  • C# OpenVINO讀取百度模型實現(xiàn)印章檢測

    C# OpenVINO讀取百度模型實現(xiàn)印章檢測

    這篇文章主要為大家詳細介紹了C# OpenVINO如何通過直接讀取百度模型實現(xiàn)印章檢測,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 關(guān)于C#基礎(chǔ)知識回顧--反射(三)

    關(guān)于C#基礎(chǔ)知識回顧--反射(三)

    在前面例子中,由于MyClass類型的對象是顯示創(chuàng)建的,因此使用反射技術(shù)來調(diào)用MyClass上的方法沒有任何優(yōu)勢--以普通的方式調(diào)用對象上的方法會簡單的多
    2013-07-07
  • UnityShader3實現(xiàn)波浪效果

    UnityShader3實現(xiàn)波浪效果

    這篇文章主要為大家詳細介紹了UnityShader3實現(xiàn)波浪效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • unity實現(xiàn)簡單抽獎系統(tǒng)

    unity實現(xiàn)簡單抽獎系統(tǒng)

    這篇文章主要為大家詳細介紹了unity實現(xiàn)簡單抽獎系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 解析c#操作excel后關(guān)閉excel.exe的方法

    解析c#操作excel后關(guān)閉excel.exe的方法

    C#和Asp.net下excel進程一被打開,有時就無法關(guān)閉,尤其是website.對關(guān)閉該進程有過GC、release等方法,但這些方法并不是在所有情況下均適用
    2013-07-07
  • 詳解C# 代碼占用的空間

    詳解C# 代碼占用的空間

    這篇文章主要介紹了C# 代碼占用的空間的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論

阳高县| 沅江市| 扶绥县| 大石桥市| 大化| 襄汾县| 勐海县| 布尔津县| 正阳县| 鄱阳县| 肇东市| 沁水县| 莎车县| 濉溪县| 金平| 屯门区| 杂多县| 蒙自县| 江油市| 南安市| 乾安县| 五峰| 开远市| 大丰市| 紫阳县| 沈丘县| 隆尧县| 金溪县| 共和县| 洮南市| 南充市| 清徐县| 分宜县| 彝良县| 静海县| 上高县| 射洪县| 金昌市| 五常市| 新余市| 武汉市|