西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → C#中怎么去用XML實例

C#中怎么去用XML實例

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/12/11 8:59:21字體大。A-A+

作者:西西點擊:1198次評論:0次標簽: XML

  • 類型:編程工具大。149.3M語言:中文 評分:10.0
  • 標簽:
立即下載

在學習XML之前我們先想一下,在之前我們見過這個東西么?

主要作用是做數(shù)據(jù)的存儲,而HTML是做數(shù)據(jù)的展現(xiàn).

當我們用數(shù)據(jù)庫存儲的時候的優(yōu)點是,安全度高,查詢方便.缺點就是數(shù)據(jù)量小的時候,用數(shù)據(jù)庫有點殺雞用牛刀的感覺.而且數(shù)據(jù)庫這種存儲方式必須依賴某個軟件才能查看.

用文本文件的優(yōu)點是,快速,方便.缺點就是:不安全.設(shè)計格式不太方便.

XML是個文本文件,任何操作系統(tǒng)都能識別,能把我們要的數(shù)據(jù)結(jié)構(gòu)化的存儲起來.

Office2007的文件格式docx、xlsx、pptx都是xml,先改成rar文件然后解壓。

XML和HTML的區(qū)別:

XML有且只能有一個根元素

XML嚴格區(qū)分大小寫—如果是大寫就全是大寫,如果是小寫就全是小寫

XML中的屬性都必須用引號引起來(推薦:雙引號)

元素有開始,必須有結(jié)束.

             

         

一、XML和HTML的區(qū)別演示代碼

HTML有一些預定義的標簽,而XML則沒有。HTML標簽不能擴展,XML可以擴展。除了頭上面這個是預定義好的:<?xml version=”1.0” encoding=”gb2312”?>

  在XML里面有一個規(guī)范xsd,在這里我們不學怎么寫規(guī)范,只是學習一下怎么去用XML就可以了。

 

二、應用程序配置文件

這個配置文件就是個XML文件,經(jīng)常用的就是數(shù)據(jù)庫連接。

 

三、XML文檔規(guī)范

XML當中的嵌套問題:

 

四、XML當中的嵌套

用記事本就可以編寫XML文件,通過程序來寫怎么來寫呢?

1.Dom[XmlDocument、XDocument](文檔對象模型,將整個xml加載到內(nèi)存中,然后操作)、

2.Sax(事件驅(qū)動,.net中使用XmlReader(XmlTextReader)、XmlWriter(XmlTextWriter)來替代)等,還有高級的讀寫技術(shù)

3.XmlSerializer(xml序列化,需要先定義類)、

4.Linq To XML(System.Xml.Linq)等, XmlSerializer要求對每種不同的文件都定義一套類,很麻煩,而Linq To XML則不需要單獨創(chuàng)建類,當然更底層一些,代碼比XmlSerializer多,靈活性更高。System.Xml下的類是2.0及之前操作xml推薦的,現(xiàn)在很多人也仍然在用這個namespace下的類,這個namespace下的類和Linq To XML非常相似,因此不用單獨學。

下面我們手動寫一個XML.我就用記事本寫了.

存儲單位的所有的員工:

 

五、新建xml文件

插入手寫的XML文件,存儲員工信息。

 1 <?xml version="1.0" encoding="gb2312"?>
 2 <guoxing>
 3 <technicalsection  count="50" room="1403">
 4 <employee TNo="gx001">
 5 <name>陳濤</name>
 6 <age>18</age>
 7 <gender>男</gender>
 8 </employee>
 9 <employee TNo="gx001">
10 <name>陳濤2</name>
11 <age>18</age>
12 <gender>男</gender>
13 </employee>
14 <employee TNo="gx001">
15 <name>陳濤3</name>
16 <age>18</age>
17 <gender>男</gender>
18 </employee>
19 <employee TNo="gx001">
20 <name>陳濤4</name>
21 <age>18</age>
22 <gender>男</gender>
23 </employee>
24 <employee TNo="gx001">
25 <name>陳濤5</name>
26 <age>18</age>
27 <gender>男</gender>
28 </employee>
29 </technicalsection>
30 
31 <salesdepartment count="50" room="1506">
32 
33 </salesdepartment>
34 </guoxing>

可以用瀏覽器進行預覽。

 

六、在瀏覽器中進行預覽的效果

接下來我們就介紹通過程序來寫一個XML文件。和通過程序來讀XML文件。

下把我們剛自己手動寫好的XML文件拷入程序,然后,讀取下。

 

七、添加XML文件

 

八、遞歸輸出每個節(jié)點

在還有子元素的情況下,我們

這里已經(jīng)沒辦法再遍歷出來了。所以在這里我們就考慮遞歸了。

九、遞歸顯示每個子元素代碼

接下來我們在讀取其中的屬性

 

十、輸出屬性的代碼

現(xiàn)在我只想輸出count屬性,怎么辦呢?

item.Attribute(“count”);//根據(jù)屬性名來獲取指定的屬性的值。

在name標簽里面還有值,怎么才能打印出來里面的值呢?當沒有子元素的時候就把值打印出來。

判斷一下當前標簽是否有子元素。

 

十一、把沒有子元素的值也打印出來

上面我們是把XML顯示在控制臺上了,要是加載到treeview就比較的清晰了。(作業(yè))

XML當中的其它一些個基本概念。

在XML當中可以寫個注釋

注釋不能算是XML的元素,但是這些都是XML的節(jié)點。所以注釋打印不出來。

xdoc.Elements()//只返回元素

xdoc.Nodes()返回所有節(jié)點(包括注釋等。)

xeRoot.Elements(“net”)搜索直接子元素

xeRoot.Descendants(“net”);搜索所有后代元素。

將XML文件遞歸加載到treeview上。

 

十二、畫好界面,加載好文件

 

十三、遞歸到樹

網(wǎng)頁RSS訂閱

打開網(wǎng)站看新聞的時候,會有很多的廣告。在網(wǎng)站上找到RSS。

 

十四、點擊:XML訂閱

對于各大網(wǎng)站,如果我們只看新聞的標題,不看內(nèi)容的話,對于我們看新聞來講會更加的直接。

打開foxmail

 

十五、RSS訂閱

formail是怎么得到網(wǎng)頁當天的新聞的呢?是連上網(wǎng)頁的數(shù)據(jù)庫了么?這是不可能的。我們把剛才的網(wǎng)頁xml文件下載-另存為一下。

 

十六、下載xml文件

 

十七、用高級記事本打開看下里面的內(nèi)容

想讓它正常格式顯示的話,復制-粘貼到xml文件

 

十八、新建xml文件

在我們的編輯工具里面,ctrl+K+D,自動格式化了。去掉外部樣式表,就跟我們自己寫的xml一回事兒了。

 

十九、普通的xml文件

xml文件當中只有一個根節(jié)點,包含了什么內(nèi)容呢?包含channel這個節(jié)點。formail通過title識別哪個頻道,我們的formail之所以能看到新聞,就是它讀取并且解析了這個xml文件。

把這個xml文件放到我們寫的項目下,

 

二十、也能實現(xiàn)加載內(nèi)容

xml案例

讀取order.xml文件,一行一行的輸出。

 

二十一、將xml文件拷貝過來

 

二十二、需要我們讀取并且輸出的xml文件

 

二十三、讀取訂單xml文件內(nèi)容并輸出的代碼

我們在看下面一個案例:

 

二十四、銀行交易數(shù)據(jù)讀寫

案例中需要用到的XML文件插入位置:

  1 <?xml version="1.0" encoding="utf-8" ?> 
  2 <CFX>
  3         <MSG>
  4             <交易碼  val="1000"/>
  5             <流水號  val="100000000000000001"/>
  6             <金額  val="1234567890.12"/>
  7             <付款機構(gòu)  val="騰訊銷售部"/>
  8             <付款單位賬號  val="12345678901234567890"/>
  9             <收款機構(gòu)  val="新浪財務部"/>
 10             <收款單位賬號  val="12345678901234567890"/>
 11         </MSG>
 12         <MSG>
 13             <交易碼  val="1000"/>
 14             <流水號  val="100000000000000002"/>
 15             <金額  val="1234567890.12"/>
 16             <付款機構(gòu)  val="1234"/>
 17             <付款單位賬號  val="12345678901234567890"/>
 18             <收款機構(gòu)  val="1234"/>
 19             <收款單位賬號  val="12345678901234567890"/>
 20         </MSG>
 21         <MSG>
 22             <交易碼  val="1000"/>
 23             <流水號  val="100000000000000003"/>
 24             <金額  val="1234567890.12"/>
 25             <付款機構(gòu)  val="1234"/>
 26             <付款單位賬號  val="12345678901234567890"/>
 27             <收款機構(gòu)  val="1234"/>
 28             <收款單位賬號  val="12345678901234567890"/>
 29         </MSG>
 30         <MSG>
 31             <交易碼  val="1000"/>
 32             <流水號  val="100000000000000004"/>
 33             <金額  val="1234567890.12"/>
 34             <付款機構(gòu)  val="1234"/>
 35             <付款單位賬號  val="12345678901234567890"/>
 36             <收款機構(gòu)  val="1234"/>
 37             <收款單位賬號  val="12345678901234567890"/>
 38         </MSG>
 39         <MSG>
 40             <交易碼  val="1000"/>
 41             <流水號  val="100000000000000005"/>
 42             <金額  val="1234567890.12"/>
 43             <付款機構(gòu)  val="1234"/>
 44             <付款單位賬號  val="12345678901234567890"/>
 45             <收款機構(gòu)  val="1234"/>
 46             <收款單位賬號  val="12345678901234567890"/>
 47         </MSG>
 48         <MSG>
 49             <交易碼  val="1000"/>
 50             <流水號  val="100000000000000006"/>
 51             <金額  val="1234567890.12"/>
 52             <付款機構(gòu)  val="1234"/>
 53             <付款單位賬號  val="12345678901234567890"/>
 54             <收款機構(gòu)  val="1234"/>
 55             <收款單位賬號  val="12345678901234567890"/>
 56         </MSG>
 57         <MSG>
 58             <交易碼  val="1000"/>
 59             <流水號  val="100000000000000007"/>
 60             <金額  val="1234567890.12"/>
 61             <付款機構(gòu)  val="1234"/>
 62             <付款單位賬號  val="12345678901234567890"/>
 63             <收款機構(gòu)  val="1234"/>
 64             <收款單位賬號  val="12345678901234567890"/>
 65         </MSG>
 66         <MSG>
 67             <交易碼  val="1000"/>
 68             <流水號  val="100000000000000008"/>
 69             <金額  val="1234567890.12"/>
 70             <付款機構(gòu)  val="1234"/>
 71             <付款單位賬號  val="12345678901234567890"/>
 72             <收款機構(gòu)  val="1234"/>
 73             <收款單位賬號  val="12345678901234567890"/>
 74         </MSG>
 75         <MSG>
 76             <交易碼  val="1000"/>
 77             <流水號  val="100000000000000009"/>
 78             <金額  val="1234567890.12"/>
 79             <付款機構(gòu)  val="1234"/>
 80             <付款單位賬號  val="12345678901234567890"/>
 81             <收款機構(gòu)  val="1234"/>
 82             <收款單位賬號  val="12345678901234567890"/>
 83         </MSG>
 84         <MSG>
 85             <交易碼  val="1000"/>
 86             <流水號  val="100000000000000010"/>
 87             <金額  val="1234567890.12"/>
 88             <付款機構(gòu)  val="1234"/>
 89             <付款單位賬號  val="12345678901234567890"/>
 90             <收款機構(gòu)  val="1234"/>
 91             <收款單位賬號  val="12345678901234567890"/>
 92         </MSG>
 93         <MSG>
 94             <交易碼  val="1000"/>
 95             <流水號  val="100000000000000011"/>
 96             <金額  val="1234567890.12"/>
 97             <付款機構(gòu)  val="1234"/>
 98             <付款單位賬號  val="12345678901234567890"/>
 99             <收款機構(gòu)  val="1234"/>
100             <收款單位賬號  val="12345678901234567890"/>
101         </MSG>
102         <MSG>
103             <交易碼  val="1000"/>
104             <流水號  val="100000000000000012"/>
105             <金額  val="1234567890.12"/>
106             <付款機構(gòu)  val="1234"/>
107             <付款單位賬號  val="12345678901234567890"/>
108             <收款機構(gòu)  val="1234"/>
109             <收款單位賬號  val="12345678901234567890"/>
110         </MSG>
111         <MSG>
112             <交易碼  val="1000"/>
113             <流水號  val="100000000000000013"/>
114             <金額  val="1234567890.12"/>
115             <付款機構(gòu)  val="1234"/>
116             <付款單位賬號  val="12345678901234567890"/>
117             <收款機構(gòu)  val="1234"/>
118             <收款單位賬號  val="12345678901234567890"/>
119         </MSG>
120         <MSG>
121             <交易碼  val="1000"/>
122             <流水號  val="100000000000000014"/>
123             <金額  val="1234567890.12"/>
124             <付款機構(gòu)  val="1234"/>
125             <付款單位賬號  val="12345678901234567890"/>
126             <收款機構(gòu)  val="1234"/>
127             <收款單位賬號  val="12345678901234567890"/>
128         </MSG>
129         <MSG>
130             <交易碼  val="1000"/>
131             <流水號  val="100000000000000015"/>
132             <金額  val="1234567890.12"/>
133             <付款機構(gòu)  val="1234"/>
134             <付款單位賬號  val="12345678901234567890"/>
135             <收款機構(gòu)  val="1234"/>
136             <收款單位賬號  val="12345678901234567890"/>
137         </MSG>
138 </CFX>

在做之前我們先分析一下這個XML文件,有一個根節(jié)點CFX,有多條MSG。每個MSG里面包括交易碼,流水號,金額。

 

二十五、還是先把XML文件拷貝過來

 

二十六、讀取交易記錄的xml的代碼

 現(xiàn)在我們觀察這么一段XML文件。

                       

二十七、需要觀察的xml代碼

文件中有四位同學,現(xiàn)在請獲取一年級同學的信息。

現(xiàn)在我們有種相對簡單的辦法。

 

二十八、引入xml文件

 

二十九、XmlDocument所在的命名空間

 

三十、xpath應用演示

大家在MSDN里面輸入xpath就能找到xpath每個表達式每個意思。

下面是我搜集的xpath表達式的連接,大家可以點擊查看。

XPath 表達式

下面我們先說一個問題,就是XML的序列化問題:

 

三十一、xml序列化需要用到的類

      

三十二、序列化person對象

  

三十三、序列化成功

  

三十四、序列化list集合,注意變化的地方

  

三十五、list序列化成功

這樣我們通過xml序列化可以非常方便的把一個對象直接寫成個xml文件。

反序列化變成了xmlSer.Deserialize();

   現(xiàn)在講講剛才我們提出的問題,為什么需要傳遞typeof(List<Person>)。我們拿到對象的類型能干什么呢?

如果一時想不出來,看下下面的案例:

 

三十六、例題

像上面這樣寫,能寫進去,但是有個問題,如果我再寫幾個對象進去,屬性這塊能不能動態(tài)的獲取呢?參考下系統(tǒng)給我們提供的方法,反射,通過類型獲取成員。xml序列化就是通過反射來完成的。

自己思考下怎么自己寫xml序列化:(小提示)

 

三十七、小提示

在xml序列化里面還有一個特性:

 

三十八、[XmlIgnreAttribute]特性

接下來我們看下關(guān)于深拷貝、淺拷貝的問題:

這個問題在面試的時候也是時有出現(xiàn)的。我們大家得知道什么是深拷貝、淺拷貝,以及讓我們?nèi)プ龅脑捲趺慈崿F(xiàn)。

我寫一段代碼,大家觀察。

 

三十九、從案例中明白什么是深拷貝,什么是淺拷貝

下面看如何實現(xiàn)深拷貝、淺拷貝。

 

四十、淺拷貝是它父類的方法

 測驗一下:

     

                 

四十一、p1和p2棧地址堆地址不一樣

 

四十二、表示淺拷貝對于引用類型確實指向同一塊內(nèi)存

 

四十三、實現(xiàn)淺拷貝的代碼

 

四十四、深拷貝的測驗

 

四十五、深拷貝代碼

 

四十六、淺拷貝,深拷貝圖解

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)