C#讀取XML的三種實現方式的代碼詳解

來源:互聯網
上載者:User
XML檔案是一種常用的檔案格式,本篇文章主要介紹了C#讀取XML的三種實現方式,主要是XmlDocument、XmlTextReader、Linq to Xml,有興趣的可以瞭解一下。

前言

XML檔案是一種常用的檔案格式,例如WinForm裡面的app.config以及Web程式中的web.config檔案,還有許多重要的場所都有它的身影。(類似還有Json)微軟也提供了一系列類庫來倒協助我們在應用程式中儲存XML檔案

在程式中訪問進而操作XML檔案一般有兩種模型:

DOM(文件物件模型):使用DOM的好處在於它允許編輯和更新XML文檔,可以隨機訪問文檔中的資料,可以使用XPath查詢,但是,DOM的缺點在於它需要一次性的載入整個文檔到記憶體中,對於大型的文檔,這會造成資源問題。

流模型:流模型很好的解決了這個問題,因為它對XML檔案的訪問採用的是流的概念,也就是說,任何時候在記憶體中只有當前節點,但它也有它的不足,它是唯讀,僅向前的,不能在文檔中執行向後導航操作。

C#中三種讀取XML檔案方法如下:

1.使用 XmlDocument(DOM模式)

2.使用 XmlTextReader(流模式)

3.使用 Linq to Xml(Linq模式)

使用XmlDocument方式讀取

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

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

讀取所有資料

使用的時候,首先聲明一個XmlDocument對象,然後調用Load方法,從指定的路徑載入XML檔案.

BookModel是圖書模型

#region XmlDocument讀取public static void XmlDocumentReadDemo(){  //list  List<BookModel> bookModeList = new List<BookModel>();  //使用的時候,首先聲明一個XmlDocument對象,然後調用Load方法,從指定的路徑載入XML檔案.  XmlDocument doc = new XmlDocument();  XmlReaderSettings settings = new XmlReaderSettings();  settings.IgnoreComments = true;//忽略文檔裡面的注釋  using (XmlReader reader = XmlReader.Create(@"d:/demo.xml", settings))  {    doc.Load(reader);    //doc.Load(@"d:/demo.xml");    //然後可以通過調用SelectSingleNode得到指定的結點,通過GetAttribute得到具體的屬性值.參看下面的代碼    // 得到根節點bookstore    XmlNode xn = doc.SelectSingleNode("bookstore");    // 得到根節點的所有子節點    XmlNodeList xnl = xn.ChildNodes;    foreach (XmlNode xn1 in xnl)    {      BookModel bookModel = new BookModel();      // 將節點轉換為元素,便於得到節點的屬性值      XmlElement xe = (XmlElement)xn1;      // 得到Type和ISBN兩個屬性的屬性值      bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();      bookModel.BookType = xe.GetAttribute("Type").ToString();      // 得到Book節點的所有子節點      XmlNodeList xnl0 = xe.ChildNodes;      bookModel.BookName = xnl0.Item(0).InnerText;      bookModel.BookAuthor = xnl0.Item(1).InnerText;      bookModel.BookPrice = Convert.ToDouble(xnl0.Item(2).InnerText);      bookModeList.Add(bookModel);    }  }  bookModeList.Add(new BookModel());}#endregion XmlDocument讀取

運行結果如下:

使用XmlTextReader方式讀取

使用XmlTextReader讀取資料的時候,首先建立一個流,然後用read()方法來不斷的向下讀,根據讀取的結點的類型來進行相應的操作.如下:

#region XmlTextReaderDemopublic static void XmlTextReaderDemo(){  XmlTextReader reader = new XmlTextReader(@"d:/demo.xml");  List<BookModel> modelList = new List<BookModel>();  BookModel model = new BookModel();  while (reader.Read())  {    if (reader.NodeType == XmlNodeType.Element)    {      if (reader.Name == "book")      {        model.BookType = reader.GetAttribute("Type");        model.BookISBN = reader.GetAttribute("ISBN");      }      if (reader.Name == "title")      {        model.BookName = reader.ReadElementContentAsString();      }      if (reader.Name == "author")      {        model.BookAuthor = reader.ReadElementString().Trim();      }      if (reader.Name == "price")      {        model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());      }      //for(int i=0;i<reader.AttributeCount;i++)      //{      //  reader.MoveToAttribute(i);      //}    }    if (reader.NodeType == XmlNodeType.EndElement)    {      modelList.Add(model);      model = new BookModel();    }  }  reader.Close();  modelList.Add(new BookModel());}#endregion XmlTextReaderDemo

使用 Linq to Xml讀取

Linq是C#3.0中出現的一個新特性,使用它可以方便的操作許多資料來源,也包括XML檔案.使用Linq操作XML檔案非常的方便,而且也比較簡單。

必須引用using System.Linq;using System.Xml.Linq;

#region 讀取所有的資料XElement xe = XElement.Load(@"d:/demoLinq.xml");//xe.Descendantsvar elements = from ele in xe.Elements()        select ele;List<BookModel> modelList = new List<BookModel>();foreach (var ele in elements){  BookModel model = new BookModel();  model.BookAuthor = ele.Element("author").Value;  model.BookName = ele.Element("title").Value;  model.BookPrice = Convert.ToDouble(ele.Element("price").Value);  model.BookISBN = ele.Attribute("ISBN").Value;  model.BookType = ele.Attribute("Type").Value;  modelList.Add(model);}modelList.Add(new BookModel());#endregion 讀取所有的資料

總結

1.XmlDocument方法優點是便於尋找

2.XmlTextReader方法是流讀取記憶體暫用少

3.Linq to Xml 最新方法也是推薦方法,代碼少易於理解

以上就是C#讀取XML的三種實現方式的代碼詳解的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.