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

C#讀取XML的三種實現(xiàn)方式

 更新時間:2017年02月11日 10:56:55   作者:WindyAmy  
XML文件是一種常用的文件格式,本篇文章主要介紹了C#讀取XML的三種實現(xiàn)方式,主要是XmlDocument、XmlTextReader、Linq to Xml,有興趣的可以了解一下。

前言

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

在程序中訪問進而操作XML文件一般有兩種模型:

DOM(文檔對象模型):使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機訪問文檔中的數(shù)據(jù),可以使用XPath查詢,但是,DOM的缺點在于它需要一次性的加載整個文檔到內(nèi)存中,對于大型的文檔,這會造成資源問題。

流模型:流模型很好的解決了這個問題,因為它對XML文件的訪問采用的是流的概念,也就是說,任何時候在內(nèi)存中只有當前節(jié)點,但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執(zhí)行向后導航操作。

C#中三種讀取XML文件方法如下:

1.使用 XmlDocument(DOM模式)

2.使用 XmlTextReader(流模式)

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

使用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é)點

讀取所有數(shù)據(jù)

使用的時候,首先聲明一個XmlDocument對象,然后調(diào)用Load方法,從指定的路徑加載XML文件.

BookModel是圖書模型

#region XmlDocument讀取

public static void XmlDocumentReadDemo()
{
  //list
  List<BookModel> bookModeList = new List<BookModel>();

  //使用的時候,首先聲明一個XmlDocument對象,然后調(diào)用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");
    //然后可以通過調(diào)用SelectSingleNode得到指定的結(jié)點,通過GetAttribute得到具體的屬性值.參看下面的代碼
    // 得到根節(jié)點bookstore
    XmlNode xn = doc.SelectSingleNode("bookstore");
    // 得到根節(jié)點的所有子節(jié)點
    XmlNodeList xnl = xn.ChildNodes;

    foreach (XmlNode xn1 in xnl)
    {
      BookModel bookModel = new BookModel();
      // 將節(jié)點轉(zhuǎn)換為元素,便于得到節(jié)點的屬性值
      XmlElement xe = (XmlElement)xn1;
      // 得到Type和ISBN兩個屬性的屬性值
      bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
      bookModel.BookType = xe.GetAttribute("Type").ToString();
      // 得到Book節(jié)點的所有子節(jié)點
      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讀取

運行結(jié)果如下:

 

 使用XmlTextReader方式讀取

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

#region XmlTextReaderDemo

public 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中出現(xiàn)的一個新特性,使用它可以方便的操作許多數(shù)據(jù)源,也包括XML文件.使用Linq操作XML文件非常的方便,而且也比較簡單。

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

#region 讀取所有的數(shù)據(jù)

XElement xe = XElement.Load(@"d:/demoLinq.xml");
//xe.Descendants
var 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 讀取所有的數(shù)據(jù)

 總結(jié)

1.XmlDocument方法優(yōu)點是便于查找

2.XmlTextReader方法是流讀取內(nèi)存暫用少

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

源碼下載:ConsoleApplication_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 學習Winform分組類控件(Panel、groupBox、TabControl)

    學習Winform分組類控件(Panel、groupBox、TabControl)

    這篇文章主要和大家一起學習Winform分組類控件,包括容器控件(Panel),分組框控件(groupBox)和選項卡控件(TabControl)等控件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C#實現(xiàn)歸并排序

    C#實現(xiàn)歸并排序

    這篇文章介紹了C#實現(xiàn)歸并排序的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#讀寫INI文件的方法

    C#讀寫INI文件的方法

    這篇文章主要介紹了C#讀寫INI文件的方法,涉及C#讀寫ini文件的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C# 值類型的實現(xiàn)

    C# 值類型的實現(xiàn)

    本文主要介紹了C# 值類型的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • VS里使用C#制作窗口應用的項目實踐

    VS里使用C#制作窗口應用的項目實踐

    C#窗體的頻率使用特別高,本文主要介紹了VS里使用C#制作窗口應用的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C#使用SQLDMO操作數(shù)據(jù)庫的方法

    C#使用SQLDMO操作數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#使用SQLDMO操作數(shù)據(jù)庫的方法,實例分析了基于SQLDMO.dll動態(tài)鏈接庫操作數(shù)據(jù)庫的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C# Task Cancellation使用總結(jié)

    C# Task Cancellation使用總結(jié)

    本文主要介紹了在使用CancellationTokenSource取消任務時的行為,以及如何使用Task的ContinueWith方法來處理任務的延續(xù)
    2024-12-12
  • 詳解C#中String.ToCharArray方法的使用

    詳解C#中String.ToCharArray方法的使用

    這篇文章主要為大家詳細介紹了C#中String.ToCharArray方法的使用的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • C#簡單判斷字符編碼的方法

    C#簡單判斷字符編碼的方法

    這篇文章主要介紹了C#簡單判斷字符編碼的方法,可實現(xiàn)判斷utf-8,unicode,ansi等編碼的功能,簡單實用,需要的朋友可以參考下
    2016-06-06
  • 基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法

    基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法

    這篇文章主要介紹了基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法,是應用非常廣泛,需要的朋友可以參考下
    2014-08-08

最新評論

体育| 亳州市| 华安县| 深圳市| 雅江县| 光泽县| 德兴市| 垫江县| 郸城县| 资兴市| 望奎县| 晋中市| 临潭县| 京山县| 浠水县| 寿阳县| 宁阳县| 白朗县| 田林县| 库尔勒市| 金乡县| 呼伦贝尔市| 佛坪县| 呼和浩特市| 阿坝县| 三亚市| 靖安县| 葫芦岛市| 社旗县| 赣州市| 桐柏县| 定日县| 铅山县| 称多县| 二连浩特市| 鄱阳县| 盈江县| 柘城县| 湖南省| 泾阳县| 肥西县|