第十章 使用XML_第1頁
第十章 使用XML_第2頁
第十章 使用XML_第3頁
第十章 使用XML_第4頁
第十章 使用XML_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.學(xué)習(xí)目標(biāo): 掌握xml的訪問接口。 掌握在.net下dom的實現(xiàn)。xml:可擴(kuò)展標(biāo)記語言(extensible markup language),xml是被用來存儲數(shù)據(jù)、攜帶數(shù)據(jù)和交換數(shù)據(jù)的。10.1 xml訪問接口:xml的訪問接口目前有兩種不同的實現(xiàn):dom和sax。其中dom在.net中得到完整的實現(xiàn)并有所擴(kuò)展,sax也在.net中有模擬實現(xiàn)的機(jī)制。1. dom:document object model:文檔對象模型,或稱“dom”是來自互聯(lián)網(wǎng)協(xié)會(w3c)的一種交叉語言,用以訪問和修改xml文檔。dom可以將xml文檔處理成為一種樹狀的數(shù)據(jù)結(jié)構(gòu),或是從客戶代碼生成這種數(shù)據(jù)結(jié)構(gòu)。并且

2、提供了一套易讀的對象來訪問這種數(shù)據(jù)結(jié)構(gòu)。2. sax:simple application for xml:sax是另一種處理xml文檔內(nèi)容的方法。10.2 xml文檔的樹結(jié)構(gòu):dom標(biāo)準(zhǔn)將xml文檔轉(zhuǎn)換為樹型的文檔結(jié)構(gòu),這棵對象樹是xml文檔內(nèi)元素之間關(guān)系的反映,通過這棵樹可以訪問和修改xml文檔的數(shù)據(jù)。應(yīng)用程序可以通過樹型模型對xml文檔數(shù)據(jù)進(jìn)行層次化的訪問。精品.文檔中的信息包括數(shù)據(jù)的意義和數(shù)據(jù)的關(guān)系。10.3 .net的dom實現(xiàn):dom為程序提供了一個遍歷操縱和修改xml文檔的編程接口。.net中支持dom的類主要存在于systems.xml和systems.xml.xmldocum

3、ent命名空間中,這些類同樣分為兩個層次:基礎(chǔ)類和擴(kuò)展類。10.3.1 .net中的基礎(chǔ)xml類:在基礎(chǔ)類層次中.net類庫包含了三類。xmlnodelist類用來表示一個節(jié)點的有序集合,它提供了對迭代操作和索引器的支持xmlnamenodemap類用來表示一個節(jié)點的集合,該集合中的元素即節(jié)點可以使用節(jié)點名或索引來訪問,支持使用節(jié)點名稱和迭代器來對屬性集合的訪問并且包含了對名字空間的支持。xmlnode的屬性屬性描述value返回或設(shè)置節(jié)點的值attributes返回一個xmlattributecollection對象,這個對象包含了節(jié)點的所有屬性節(jié)點精品.parentnode返回節(jié)點的父節(jié)點

4、childnodes返回一個xmlnodelist對象,該對象包含了這個節(jié)點的所有子節(jié)點firstchild返回節(jié)點的第一個子節(jié)點lastchild返回節(jié)點的最后一個子節(jié)點haschildnodes返回一個布爾值該值指明了這個節(jié)點是否包含了子節(jié)點previoussibling返回緊跟著該節(jié)點的上一個兄弟節(jié)點nextsibling返回緊跟著該節(jié)點的下一個兄弟節(jié)點innerxml返回或設(shè)置表示該節(jié)點及其子節(jié)點的標(biāo)記文本outerxml返回該節(jié)點及其下子節(jié)點的標(biāo)記文本isreadonly返回一個布爾值該值指明了該節(jié)點是否是只讀節(jié)點name返回節(jié)點的全名(qualified namelocalname

5、返回節(jié)點的本地名(local nameprefix返回或設(shè)置節(jié)點的名字空間前綴nodetype返回一個xmlnodetype對象指明該節(jié)點的類型xmlnode類的主要成員:prependchild():將指定節(jié)點插入到子節(jié)點列表的最前端,返回加入的節(jié)點;如果要加入的節(jié)點已存在于樹中,它首先會被從原位置刪除;如果當(dāng)前節(jié)點類型不允許新節(jié)點的加入或者新節(jié)點是當(dāng)前節(jié)點的祖先節(jié)點,則拋出invalidoperationexceptions異常。appenchild():用來將一個指定的節(jié)點添加到子節(jié)點列表的最后。insertafter():接受兩個同為xmnode類型的節(jié)點對象,將第一個對象插入到第二個

6、對象之后,其中第二個對象是該節(jié)點的一個子節(jié)點。insertbefore():類似于insertafter()方法接受兩個xmlnode對象參數(shù),將指定的節(jié)點緊跟著插入指定的引用之前。clonenode():接受一個布爾值參數(shù),該參數(shù)為true時遞歸的復(fù)制及誒但本身及其下的所有子節(jié)點;為false時僅復(fù)制節(jié)點本身返回復(fù)制出的節(jié)點。當(dāng)該節(jié)點不能被復(fù)制時會拋出一個invalidoperationexception異常。clone():相當(dāng)于調(diào)用clonenode()方法并傳參為true。removeall():刪除所有子節(jié)點和屬性節(jié)點。removechild():刪除傳遞給該方法的子節(jié)點,如果該節(jié)點

7、不是當(dāng)前節(jié)點的子節(jié)點拋出一個argumentexception異常。replacechild():用一個節(jié)點來替換一個子節(jié)點。selectednodes():通過指定一個string類型的xpath表達(dá)式來選擇節(jié)點返回一個包含選中節(jié)點的xmlnodelist對象。精品.selectsinglenode():指定一個xpath表達(dá)式返回與該表達(dá)式匹配的第一個節(jié)點。writercontentto();將節(jié)點的所有子節(jié)點寫到指定的xmlwriter對象中。writerto():將當(dāng)前節(jié)點寫到指定的xmlwriter對象中。10.3.2 .net中的擴(kuò)展xml類:擴(kuò)展類層次包含了眾多的類,主要的類如下

8、(它們都是由xmlnode類派生出來的):xmldocument類用來表示xml文檔的頂層節(jié)點;xmlelement類表示文檔中的一個元素對象;xmlattribute類表示xmlxmlelement對象的一個屬性,該屬性的合法設(shè)值和缺省值信息由dtd或schema定義;xmlattributecollection類表示了element對象的屬性的集合,這些屬性的合法值和缺省值信息也同樣由dtd或schema定義;xmlcomment類表示xml文檔中的注釋內(nèi)容;xmldeclaration類表示xml的聲明節(jié)點;xmldocumenttype類表示xml文檔中的doctype聲明節(jié)點;xml

9、entity類表示xml文檔中一個解析過或未解析過的實體;xmlentityreference類表示一個實體引用;xmltext類表示了一個元素或?qū)傩缘奈谋緝?nèi)容。10.3.3 使用xmldocument和其他對象:xmldocument節(jié)點類型是xmlnode的一個派生類,它用來表示一個xml文檔對象。精品.xmldocument的重要屬性:documentelement屬性返回一個xmlelement對象,該對象是該文檔的根元素。documenttype屬性返回一個xmldocument對象,該對象表示了文檔中的doctype聲明節(jié)點。xmlresolver屬性用來設(shè)置一個xmlresolv

10、er對象,從而可以向文檔中裝載dtd或外部實體引用。baseuri屬性返回xml文檔的位置;nodetype屬性被重載為返回xmlnodetype.document值。xmldocument類的方法:load()向xmldocument對象裝載xml數(shù)據(jù),可以接受來自stream對象textreader對象或xmlreader對象的xml數(shù)據(jù)也可以接受一個表示xml文件路徑和文件名的字符串;loadedxml()方法則從一個指定的字符串來裝載xml文檔。save()將xml保存到特定位置,接受streaming對象。createattribute()方法創(chuàng)建一個節(jié)點xmlattribute對象

11、,創(chuàng)建對象后使用文檔中的某個xmlelement對象的setattributenode()方法來創(chuàng)建的屬性賦值給該xmlelement對象表示的元素。createcomment()方法創(chuàng)建一個xmlcomment對象。createelement()方法創(chuàng)建一個元素對象使其innertext屬性來設(shè)置其內(nèi)容并使用;精品.appendchild()方法創(chuàng)建各種類型的節(jié)點設(shè)置其值和其并將它們插入到dom樹的適當(dāng)位置上。importnode()方法將來自其他對象的節(jié)點添加到現(xiàn)有文檔中。其他類對象的使用:節(jié)點類包括表示元素節(jié)點的xmlelement,表示屬性的xmlattribute,表示評注的xmlc

12、omment等等,每種節(jié)點還具有nodetype屬性可以使用,該屬性用來判斷節(jié)點的類型。10.3.4 處理xmldocument的事件: xmlnode類提供selectednodes()和selectsinglenode()方法。使用這兩個方法可以在當(dāng)前節(jié)點為根的子樹中選取符合某種條件的節(jié)點。10.3.5 處理xmldocument的事件:xmldocument對象會觸發(fā)若干種事件,這些事件主要有:nodechanging:文檔中的某個節(jié)點的value屬性將要被改變時可以通過處理該事件來進(jìn)行額外的檢查工作,如果必要可以拋出一個異常來中止操作并將文檔對象恢復(fù)到原來的狀態(tài),該事件只對那些擁有va

13、lue屬性的節(jié)點有用。nodechanged:當(dāng)文檔中的某個節(jié)點的value屬性被改變后觸發(fā)。nodeinserting:當(dāng)文檔中的某個節(jié)點將要被插入到另一個節(jié)點中時,可以通過處理該事件來進(jìn)行額外的檢查工作,如果必要可以拋出一個異常來中止插入操作并將文檔對象恢復(fù)到原來的狀態(tài)。nodeinserted:當(dāng)文檔中的某個節(jié)點插入到另一個節(jié)點中后觸發(fā)。精品.noderemoving:當(dāng)文檔中的某個節(jié)點將要被從文檔刪除時,可以通過處理該事件來進(jìn)行額外的檢查工作,如果必要可以拋出一個異常來中止刪除操作并將文檔對象恢復(fù)到原來的狀態(tài)。noderemoved:當(dāng)文檔中的某個節(jié)點被刪除后觸發(fā)。這三類事件的類型均是

14、xmlnodechangedeventhandler。10.4 .net對xml sax的模擬:xml還有另外一種標(biāo)準(zhǔn)接口稱為sax接口。sax的全稱是simple application for xml。簡單是sax的一大特性,sax是由事件驅(qū)動的。當(dāng)xml解析器遇到特定的事件時會調(diào)用不同的函數(shù)來處理,特定事件sax接口只是調(diào)用相應(yīng)的函數(shù)對于數(shù)據(jù)的處理是函數(shù)完成的。sax對于數(shù)據(jù)文檔的訪問是順序的從文檔開始到文檔結(jié)束,不能隨機(jī)地訪問文檔中任意數(shù)據(jù),這是因為sax沒有將所有的文檔數(shù)據(jù)放入內(nèi)存。sax的優(yōu)勢主要體現(xiàn)在:(1) 當(dāng)xml文檔比較龐大時使用dom接口會占用大量的內(nèi)存空間,而sax接口

15、所需要的空間要小得多,不需要額外的空間。(2) sax允許在任何情況下中斷解析進(jìn)程。(3) sax不必解析整個xml文檔,然后將所需要的信息返回。(4) 使用dom接口可使用的只有元素和指令等低級對象而使用sax可以更高效的創(chuàng)建這樣的文檔數(shù)據(jù)結(jié)構(gòu)。精品.在.net framework中主要使用xmlreader和xmlwriter兩個類來模擬sax接口數(shù)據(jù)訪問方式。10.4.1 xmlreader和xmlwriter: xmlreader:xmlreader使用一種稱為拉模式的方法訪問xml文檔。推模式是解析器每次獨到屬性處理指令等內(nèi)容都要向客戶程序通報,然后由客戶程序處理這些

16、數(shù)據(jù)內(nèi)容。拉模式中解析器只會通報由客戶程序指定的數(shù)據(jù)內(nèi)容。具體可提供的xmlreader有:(1) xmltextreader:用程序使用xmltextreader訪問xml數(shù)據(jù)是比較常用的方法,xmltextreader不支持dtd和schema。(2) xmlnodereader:xmlnodereader將xml文檔解析為dom樹后xmlnodereader類的實例指針提供對dom樹中xmlnode對象的解析。(3) xmlvalidatingreader:xmlvalidatingreader的實例指針根據(jù)dtd,xsd和xdr檢查xml數(shù)據(jù)類型的有效性,通過validationtyp

17、e屬性可以決定檢查的規(guī)則類型。(4) 實現(xiàn)xmlreader創(chuàng)建自定義reader:可以根據(jù)不同的需要編寫自己的類或擴(kuò)展現(xiàn)有的類實現(xiàn)有特殊要求的xml文檔數(shù)據(jù)訪問。 xmlreader的作用:10.4.2 其他方法和屬性:精品.10.5 xmlwriter的應(yīng)用(xmltextwriter):xmltextwriter是xmlwriter的實現(xiàn)類,提供快速、非緩沖、只進(jìn)方法的編寫器,用以操作xml數(shù)據(jù)。xmltextwriter對象包含了很多可用于在創(chuàng)建xml文件時添加元素和屬性到xml文件里的方法,比較重要的是:writestartdocument():創(chuàng)建xml文件首先就需要用到這個方法,它是在創(chuàng)建xml文件的第一行代碼,用來指定該文件xml文件以及設(shè)置它的編碼類型。writestartelement(string):這個方法的作用是在xml文件中創(chuàng)建新元素,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論