C#中常用的幾種讀取XML檔案的方法
“在程式中訪問進而操作XML檔案一般有兩種模型,分別是使用DOM(文件物件模型)和流模型,使用DOM的好處在於它允許編輯和更新XML文件,可以隨機訪問文件中的資料,可以使用XPath查詢,但是,DOM的缺點在於它需要一次性的載入整個文件到記憶體中,對於大型的文件,這會造成資源問題。流模型很好的解決了這個問題,因為它對XML檔案的訪問採用的是流的概念,也就是說,任何時候在記憶體中只有當前節點,但它也有它的不足,它是隻讀的,僅向前的,不能在文件中執行向後導航操作。”具體參見在Visual C#中使用XML指南之讀取XML
下面我將介紹三種常用的讀取XML檔案的方法。分別是
1:使用 XmlDocument
2: 使用 XmlTextReader
3: 使用 Linq to Xml
這裡我先建立一個XML檔案,名為Book.xml下面所有的方法都是基於這個XML檔案的,檔案內容如下:
1: <?xml version="1.0" encoding="utf-8"?>
2: <bookstore>
3: <!--記錄書本的資訊-->
4: <book Type="必修課" ISBN="7-111-19149-2">
5: <title>資料結構</title>
6: <author>嚴蔚敏</author>
7: <price>30.00</price>
8: </book>
9: <book Type="必修課" ISBN="7-111-19149-3">
10: <title>路由型與交換型網際網路基礎</title>
11: <author>程慶梅</author>
12: <price>27.00</price>
13: </book>
14: <book Type="必修課" ISBN="7-111-19149-4">
15: <title>計算機硬體技術基礎</title>
16: <author>李繼燦</author>
17: <price>25.00</price>
18: </book>
19: <book Type="必修課" ISBN="7-111-19149-5">
20: <title>軟體質量保證與管理</title>
21: <author>朱少民</author>
22: <price>39.00</price>
23: </book>
24: <book Type="必修課" ISBN="7-111-19149-6">
25: <title>演算法設計與分析</title>
26: <author>王紅梅</author>
27: <price>23.00</price>
28: </book>
29: <book Type="選修課" ISBN="7-111-19149-1">
30: <title>計算機作業系統</title>
31: <author>7-111-19149-1</author>
32: <price>28</price>
33: </book>
34: </bookstore>
為了方便讀取,我還定義一個書的實體類,名為BookModel,具體內容如下:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace 使用XmlDocument
7: {
8: public class BookModel
9: {
10: public BookModel()
11: { }
12: /// <summary>
13: /// 所對應的課程型別
14: /// </summary>
15: private string bookType;
16:
17: public string BookType
18: {
19: get { return bookType; }
20: set { bookType = value; }
21: }
22:
23: /// <summary>
24: /// 書所對應的ISBN號
25: /// </summary>
26: private string bookISBN;
27:
28: public string BookISBN
29: {
30: get { return bookISBN; }
31: set { bookISBN = value; }
32: }
33:
34: /// <summary>
35: /// 書名
36: /// </summary>
37: private string bookName;
38:
39: public string BookName
40: {
41: get { return bookName; }
42: set { bookName = value; }
43: }
44:
45: /// <summary>
46: /// 作者
47: /// </summary>
48: private string bookAuthor;
49:
50: public string BookAuthor
51: {
52: get { return bookAuthor; }
53: set { bookAuthor = value; }
54: }
55:
56: /// <summary>
57: /// 價格
58: /// </summary>
59: private double bookPrice;
60:
61: public double BookPrice
62: {
63: get { return bookPrice; }
64: set { bookPrice = value; }
65: }
66: }
67: }
1.使用XmlDocument.
使用XmlDocument是一種基於文件結構模型的方式來讀取XML檔案.在XML檔案中,我們可以把XML看作是由文件宣告(Declare),元素(Element),屬性(Attribute),文字(Text)等構成的一個樹.最開始的一個結點叫作根結點,每個結點都可以有自己的子結點.得到一個結點後,可以通過一系列屬性或方法得到這個結點的值或其它的一些屬性.例如:
1: xn 代表一個結點
2: xn.Name;//這個結點的名稱
3: xn.Value;//這個結點的值
4: xn.ChildNodes;//這個結點的所有子結點
5: xn.ParentNode;//這個結點的父結點
6: .......
1.1 讀取所有的資料.
使用的時候,首先宣告一個XmlDocument物件,然後呼叫Load方法,從指定的路徑載入XML檔案.
1: XmlDocument doc = new XmlDocument();
2: doc.Load(@"..\..\Book.xml");
然後可以通過呼叫SelectSingleNode得到指定的結點,通過GetAttribute得到具體的屬性值.參看下面的程式碼
1: // 得到根節點bookstore
2: XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
3:
4:
5: // 得到根節點的所有子節點
6: XmlNodeList xnl = xn.ChildNodes;
7:
8: foreach (XmlNode xn1 in xnl)
9: {
10: BookModel bookModel = new BookModel();
11: // 將節點轉換為元素,便於得到節點的屬性值
12: XmlElement xe = (XmlElement)xn1;
13: // 得到Type和ISBN兩個屬性的屬性值
14: bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
15: bookModel.BookType = xe.GetAttribute("Type").ToString();
16: // 得到Book節點的所有子節點
17: XmlNodeList xnl0 = xe.ChildNodes;
18: bookModel.BookName=xnl0.Item(0).InnerText;
19: bookModel.BookAuthor=xnl0.Item(1).InnerText;
20: bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);
21: bookModeList.Add(bookModel);
22: }
23: dgvBookInfo.DataSource = bookModeList;
在正常情況下,上面的程式碼好像沒有什麼問題,但是對於讀取上面的XML檔案,則會出錯,原因就是因為我上面的XML檔案裡面有註釋,大家可以參看Book.xml檔案中的第三行,我隨便加的一句註釋.註釋也是一種結點型別,在沒有特別說明的情況下,會預設它也是一個結點(Node).所以在把結點轉換成元素的時候就會報錯."無法將型別為“System.Xml.XmlComment”的物件強制轉換為型別“System.Xml.XmlElement”。"
幸虧它裡面自帶了解決辦法,那就是在讀取的時候,告訴編譯器讓它忽略掉裡面的註釋資訊.修改如下:
1: XmlDocument xmlDoc = new XmlDocument();
2: XmlReaderSettings settings = new XmlReaderSettings();
3: settings.IgnoreComments = true;//忽略文件裡面的註釋
4: XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);
5: xmlDoc.Load(reader);
最後讀取完畢後,記得要關掉reader.
相關推薦
C#中常用的幾種讀取XML檔案的方法
XML檔案是一種常用的檔案格式,例如WinForm裡面的app.config以及Web程式中的web.config檔案,還有許多重要的場所都有它的身影。Xml是Internet環境中跨平臺的,依賴於內容的技術,是當
淺談C++中的幾種建構函式
3月中旬參加宣講會,做了X軟公司的C++筆試題,裡面有一道“預設拷貝建構函式的題”,由於好久沒複習C++基礎知識,當時連基本的概念都想不來了了。於是乎,開始拿起以前看的譚浩強C++複習起來,現在書快要要啃完了,覺得收穫頗多。好比練武功,祕籍雖然重要,但更重要的還
使用dom4j四種讀取xml檔案的方法
原文地址:http://blog.163.com/chenhui_java/blog/static/172672494201092632424462/ 以下是四種讀取xml檔案的方式,每種都有自己的用處。這是我在寫日誌管理器的時候查詢到的。希望能給大家幫助 首先我們先給出一個
C++中的幾種建構函式
看了大神的部落格,感覺很厲害,果斷轉了 C++中的建構函式 C++中的建構函式可以分為4類: (1)預設建構函式。以Student類為例,預設建構函式的原型為 Student();//沒有引數 (2)初始化建構函式 Student(int num,int age)
qt 開發過程中使用DOM方式讀取XML檔案
本來沒打算記錄這個過程,QT讀取XML的方法,網上相關的博文很多,也比我的詳細,我也是參考其他大神的,但是在這過程中涉及檔案路徑操作,讓我費了點周折, 畢竟初學QT,很多不熟悉的地方。 我將XML以絕對路徑操作成功後(XML檔案內容很簡單,所有讀取這個XML也不難)想實現
c++中的幾種函數調用約定(轉)
standard amp 可見 代碼 return ext 只有一個 highlight 定義 C++中的函數調用約定主要針對三個問題: 1、參數傳遞的方式(是否采用寄存器傳遞參數、采用哪個寄存器傳遞參數、參數壓桟的順序等); 2、函數調用結束後的棧指針由誰恢復(被調用
幾種配置properties檔案方法--SSM框架-附原始碼
背景: Spring、SpringMVC4.0.2、Mybatis3.2.6、JDK1.8、tomcat8、maven3.3.9、MyEclipse2013 專案結構: demo.properties: 方法一: springmvc.xml
1.3 Android中的幾種UI排布方法介紹
關於XML基本語法介紹和XML語法總結可以參考這裡:XML基本語法介紹、XML語法總結。 在Android中,提供了一種非常簡單、方便的方法用於控制UI介面。該方法採用XML檔案來進行介面佈局,從而將佈局介面的程式碼和邏輯控制的Java程式碼分離開
幾種讀大檔案方法的效率對比測試
說明: 1、首先呼叫了 generateBigFile() 生成一個大的txt 檔案 a.txt,大小是 1.88G 。 package com.other.test1; import java.io.BufferedReader; import java.io.Fi
iOS 中的幾種延遲呼叫的方法
performSelector方法 執行方法: [self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)
Spark ML包中的幾種歸一化方法總結
org.apache.spark.ml.feature包中包含了4種不同的歸一化方法: Normalizer StandardScaler MinMaxScaler MaxAbsScaler 有時感覺會容易混淆,藉助官方文件和實際資料的變換,在這裡做一次
QT中讀取XML檔案三種方式 的例項
第一部分:QXmlStreamReader XML(eXtensible Markup Language)是一種通用的文字格式,被廣泛運用於資料交換和資料儲存(雖然近年來 JSON 盛行,大有取代 XML 的趨勢,但是對於一些已有系統和架構,比如 WebService,由於歷史原因,仍舊會繼
在C#中建立和讀取XML檔案
專案中需要將前臺頁面中的資訊儲存下來並存儲為xml檔案格式到資料庫中去。因此我先在這裡通過一個小例項來學習xml的建立與讀取。 1.建立簡單的XML檔案 為了便於測試,我們首先建立控制檯應用程式,專案命名為CreateXml,Program.cs程式碼如下: u
在用c++讀取xml檔案時,執行時出現以下錯誤:出現未處理的“System.Xml.XmlException”型別的異常出現在 system.xml.dll 中
各位高手,我剛剛開始接觸c++,使用的是Microsoft Visual Studio 2003版本,在使用c++讀取xml檔案時,編譯已經通過,但是執行.exe程式時,老是出現這個錯誤:“未處理的“System.Xml.XmlException”型別的異常出現在 syste
c#讀取xml檔案到datagridview中
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;
C++中幾種讀取資料的函式的用法
程式碼編譯執行環境:VS2012+Win32+Debug。(我用Eclipse也跑過一遍了) 1.cin簡介 cin是C++程式語言中的標準輸入流物件,即istream類的物件。cin主要用於從標準輸入讀取資料,這裡的標準輸入,指的是終端的鍵盤。此外,cout是流的物件,即ostream類的物件,cerr是
C++中使用libxml2讀取xml檔案
linux下,純c++使用libxml2讀取xml檔案 下載libxml2 [url]ftp://ftp.xmlsoft.org/libxml2/libxml2-sources-2.7.1.tar.gz[/url] 常規方法進行安裝 #tar xvzf libxml2-xx
關於Java集合類庫中的幾種常用隊列
rac syn text 刪除 style asdasd 新元素 其他 arraylist Java中幾種常用的隊列 阻塞隊列與普通隊列的區別在於,當隊列是空的時,從隊列中獲取元素的操作將會被阻塞,或者當隊列是滿時,往隊列裏添加元素的操作會被阻塞。試圖從空的阻塞隊列中獲取元
認識C#語言中的幾種循環命令
計算 依次 進行 結束 功能 if判斷 char ase do while if判斷 書寫格式: if(條件1){ 代碼1} else if(條件2){ 代碼2}e
兄弟連學Python----CSS中的幾種常用選擇器
元素選擇器 類選擇器 範圍 命名沖突 post ora before 重復 -- Css選擇器 常用的選擇器有如下幾種: 1、標簽選擇器 標簽選擇器,此種選擇器影響範圍大,建議盡量應用在層級選擇器中。 舉例: *{margin:0;padding:0} div{c