使用C#讀取XML數據的三種方法


來源:C#讀取XML的三種實現方式_C#教程_腳本之家 (jb51.net)

使用 Linq to Xml讀取

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#region 讀取所有的數據
 
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 讀取所有的數據

使用XmlDocument方式讀取

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

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

讀取所有數據

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

BookModel是圖書模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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()方法來不斷的向下讀,根據讀取的結點的類型來進行相應的操作.如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM