來源: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
|
