版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.學(xué)習(xí)目標(biāo): 掌握xml的訪問(wèn)接口。 掌握在.net下dom的實(shí)現(xiàn)。xml:可擴(kuò)展標(biāo)記語(yǔ)言(extensible markup language),xml是被用來(lái)存儲(chǔ)數(shù)據(jù)、攜帶數(shù)據(jù)和交換數(shù)據(jù)的。10.1 xml訪問(wèn)接口:xml的訪問(wèn)接口目前有兩種不同的實(shí)現(xiàn):dom和sax。其中dom在.net中得到完整的實(shí)現(xiàn)并有所擴(kuò)展,sax也在.net中有模擬實(shí)現(xiàn)的機(jī)制。1. dom:document object model:文檔對(duì)象模型,或稱“dom”是來(lái)自互聯(lián)網(wǎng)協(xié)會(huì)(w3c)的一種交叉語(yǔ)言,用以訪問(wèn)和修改xml文檔。dom可以將xml文檔處理成為一種樹狀的數(shù)據(jù)結(jié)構(gòu),或是從客戶代碼生成這種數(shù)據(jù)結(jié)構(gòu)。并且
2、提供了一套易讀的對(duì)象來(lái)訪問(wèn)這種數(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),這棵對(duì)象樹是xml文檔內(nèi)元素之間關(guān)系的反映,通過(guò)這棵樹可以訪問(wèn)和修改xml文檔的數(shù)據(jù)。應(yīng)用程序可以通過(guò)樹型模型對(duì)xml文檔數(shù)據(jù)進(jìn)行層次化的訪問(wèn)。精品.文檔中的信息包括數(shù)據(jù)的意義和數(shù)據(jù)的關(guān)系。10.3 .net的dom實(shí)現(xiàn):dom為程序提供了一個(gè)遍歷操縱和修改xml文檔的編程接口。.net中支持dom的類主要存在于systems.xml和systems.xml.xmldocum
3、ent命名空間中,這些類同樣分為兩個(gè)層次:基礎(chǔ)類和擴(kuò)展類。10.3.1 .net中的基礎(chǔ)xml類:在基礎(chǔ)類層次中.net類庫(kù)包含了三類。xmlnodelist類用來(lái)表示一個(gè)節(jié)點(diǎn)的有序集合,它提供了對(duì)迭代操作和索引器的支持xmlnamenodemap類用來(lái)表示一個(gè)節(jié)點(diǎn)的集合,該集合中的元素即節(jié)點(diǎn)可以使用節(jié)點(diǎn)名或索引來(lái)訪問(wèn),支持使用節(jié)點(diǎn)名稱和迭代器來(lái)對(duì)屬性集合的訪問(wèn)并且包含了對(duì)名字空間的支持。xmlnode的屬性屬性描述value返回或設(shè)置節(jié)點(diǎn)的值attributes返回一個(gè)xmlattributecollection對(duì)象,這個(gè)對(duì)象包含了節(jié)點(diǎn)的所有屬性節(jié)點(diǎn)精品.parentnode返回節(jié)點(diǎn)的父節(jié)點(diǎn)
4、childnodes返回一個(gè)xmlnodelist對(duì)象,該對(duì)象包含了這個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)firstchild返回節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)lastchild返回節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)haschildnodes返回一個(gè)布爾值該值指明了這個(gè)節(jié)點(diǎn)是否包含了子節(jié)點(diǎn)previoussibling返回緊跟著該節(jié)點(diǎn)的上一個(gè)兄弟節(jié)點(diǎn)nextsibling返回緊跟著該節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)innerxml返回或設(shè)置表示該節(jié)點(diǎn)及其子節(jié)點(diǎn)的標(biāo)記文本outerxml返回該節(jié)點(diǎn)及其下子節(jié)點(diǎn)的標(biāo)記文本isreadonly返回一個(gè)布爾值該值指明了該節(jié)點(diǎn)是否是只讀節(jié)點(diǎn)name返回節(jié)點(diǎn)的全名(qualified namelocalname
5、返回節(jié)點(diǎn)的本地名(local nameprefix返回或設(shè)置節(jié)點(diǎn)的名字空間前綴nodetype返回一個(gè)xmlnodetype對(duì)象指明該節(jié)點(diǎn)的類型xmlnode類的主要成員:prependchild():將指定節(jié)點(diǎn)插入到子節(jié)點(diǎn)列表的最前端,返回加入的節(jié)點(diǎn);如果要加入的節(jié)點(diǎn)已存在于樹中,它首先會(huì)被從原位置刪除;如果當(dāng)前節(jié)點(diǎn)類型不允許新節(jié)點(diǎn)的加入或者新節(jié)點(diǎn)是當(dāng)前節(jié)點(diǎn)的祖先節(jié)點(diǎn),則拋出invalidoperationexceptions異常。appenchild():用來(lái)將一個(gè)指定的節(jié)點(diǎn)添加到子節(jié)點(diǎn)列表的最后。insertafter():接受兩個(gè)同為xmnode類型的節(jié)點(diǎn)對(duì)象,將第一個(gè)對(duì)象插入到第二個(gè)
6、對(duì)象之后,其中第二個(gè)對(duì)象是該節(jié)點(diǎn)的一個(gè)子節(jié)點(diǎn)。insertbefore():類似于insertafter()方法接受兩個(gè)xmlnode對(duì)象參數(shù),將指定的節(jié)點(diǎn)緊跟著插入指定的引用之前。clonenode():接受一個(gè)布爾值參數(shù),該參數(shù)為true時(shí)遞歸的復(fù)制及誒但本身及其下的所有子節(jié)點(diǎn);為false時(shí)僅復(fù)制節(jié)點(diǎn)本身返回復(fù)制出的節(jié)點(diǎn)。當(dāng)該節(jié)點(diǎn)不能被復(fù)制時(shí)會(huì)拋出一個(gè)invalidoperationexception異常。clone():相當(dāng)于調(diào)用clonenode()方法并傳參為true。removeall():刪除所有子節(jié)點(diǎn)和屬性節(jié)點(diǎn)。removechild():刪除傳遞給該方法的子節(jié)點(diǎn),如果該節(jié)點(diǎn)
7、不是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)拋出一個(gè)argumentexception異常。replacechild():用一個(gè)節(jié)點(diǎn)來(lái)替換一個(gè)子節(jié)點(diǎn)。selectednodes():通過(guò)指定一個(gè)string類型的xpath表達(dá)式來(lái)選擇節(jié)點(diǎn)返回一個(gè)包含選中節(jié)點(diǎn)的xmlnodelist對(duì)象。精品.selectsinglenode():指定一個(gè)xpath表達(dá)式返回與該表達(dá)式匹配的第一個(gè)節(jié)點(diǎn)。writercontentto();將節(jié)點(diǎn)的所有子節(jié)點(diǎn)寫到指定的xmlwriter對(duì)象中。writerto():將當(dāng)前節(jié)點(diǎn)寫到指定的xmlwriter對(duì)象中。10.3.2 .net中的擴(kuò)展xml類:擴(kuò)展類層次包含了眾多的類,主要的類如下
8、(它們都是由xmlnode類派生出來(lái)的):xmldocument類用來(lái)表示xml文檔的頂層節(jié)點(diǎn);xmlelement類表示文檔中的一個(gè)元素對(duì)象;xmlattribute類表示xmlxmlelement對(duì)象的一個(gè)屬性,該屬性的合法設(shè)值和缺省值信息由dtd或schema定義;xmlattributecollection類表示了element對(duì)象的屬性的集合,這些屬性的合法值和缺省值信息也同樣由dtd或schema定義;xmlcomment類表示xml文檔中的注釋內(nèi)容;xmldeclaration類表示xml的聲明節(jié)點(diǎn);xmldocumenttype類表示xml文檔中的doctype聲明節(jié)點(diǎn);xml
9、entity類表示xml文檔中一個(gè)解析過(guò)或未解析過(guò)的實(shí)體;xmlentityreference類表示一個(gè)實(shí)體引用;xmltext類表示了一個(gè)元素或?qū)傩缘奈谋緝?nèi)容。10.3.3 使用xmldocument和其他對(duì)象:xmldocument節(jié)點(diǎn)類型是xmlnode的一個(gè)派生類,它用來(lái)表示一個(gè)xml文檔對(duì)象。精品.xmldocument的重要屬性:documentelement屬性返回一個(gè)xmlelement對(duì)象,該對(duì)象是該文檔的根元素。documenttype屬性返回一個(gè)xmldocument對(duì)象,該對(duì)象表示了文檔中的doctype聲明節(jié)點(diǎn)。xmlresolver屬性用來(lái)設(shè)置一個(gè)xmlresolv
10、er對(duì)象,從而可以向文檔中裝載dtd或外部實(shí)體引用。baseuri屬性返回xml文檔的位置;nodetype屬性被重載為返回xmlnodetype.document值。xmldocument類的方法:load()向xmldocument對(duì)象裝載xml數(shù)據(jù),可以接受來(lái)自stream對(duì)象textreader對(duì)象或xmlreader對(duì)象的xml數(shù)據(jù)也可以接受一個(gè)表示xml文件路徑和文件名的字符串;loadedxml()方法則從一個(gè)指定的字符串來(lái)裝載xml文檔。save()將xml保存到特定位置,接受streaming對(duì)象。createattribute()方法創(chuàng)建一個(gè)節(jié)點(diǎn)xmlattribute對(duì)象
11、,創(chuàng)建對(duì)象后使用文檔中的某個(gè)xmlelement對(duì)象的setattributenode()方法來(lái)創(chuàng)建的屬性賦值給該xmlelement對(duì)象表示的元素。createcomment()方法創(chuàng)建一個(gè)xmlcomment對(duì)象。createelement()方法創(chuàng)建一個(gè)元素對(duì)象使其innertext屬性來(lái)設(shè)置其內(nèi)容并使用;精品.appendchild()方法創(chuàng)建各種類型的節(jié)點(diǎn)設(shè)置其值和其并將它們插入到dom樹的適當(dāng)位置上。importnode()方法將來(lái)自其他對(duì)象的節(jié)點(diǎn)添加到現(xiàn)有文檔中。其他類對(duì)象的使用:節(jié)點(diǎn)類包括表示元素節(jié)點(diǎn)的xmlelement,表示屬性的xmlattribute,表示評(píng)注的xmlc
12、omment等等,每種節(jié)點(diǎn)還具有nodetype屬性可以使用,該屬性用來(lái)判斷節(jié)點(diǎn)的類型。10.3.4 處理xmldocument的事件: xmlnode類提供selectednodes()和selectsinglenode()方法。使用這兩個(gè)方法可以在當(dāng)前節(jié)點(diǎn)為根的子樹中選取符合某種條件的節(jié)點(diǎn)。10.3.5 處理xmldocument的事件:xmldocument對(duì)象會(huì)觸發(fā)若干種事件,這些事件主要有:nodechanging:文檔中的某個(gè)節(jié)點(diǎn)的value屬性將要被改變時(shí)可以通過(guò)處理該事件來(lái)進(jìn)行額外的檢查工作,如果必要可以拋出一個(gè)異常來(lái)中止操作并將文檔對(duì)象恢復(fù)到原來(lái)的狀態(tài),該事件只對(duì)那些擁有va
13、lue屬性的節(jié)點(diǎn)有用。nodechanged:當(dāng)文檔中的某個(gè)節(jié)點(diǎn)的value屬性被改變后觸發(fā)。nodeinserting:當(dāng)文檔中的某個(gè)節(jié)點(diǎn)將要被插入到另一個(gè)節(jié)點(diǎn)中時(shí),可以通過(guò)處理該事件來(lái)進(jìn)行額外的檢查工作,如果必要可以拋出一個(gè)異常來(lái)中止插入操作并將文檔對(duì)象恢復(fù)到原來(lái)的狀態(tài)。nodeinserted:當(dāng)文檔中的某個(gè)節(jié)點(diǎn)插入到另一個(gè)節(jié)點(diǎn)中后觸發(fā)。精品.noderemoving:當(dāng)文檔中的某個(gè)節(jié)點(diǎn)將要被從文檔刪除時(shí),可以通過(guò)處理該事件來(lái)進(jìn)行額外的檢查工作,如果必要可以拋出一個(gè)異常來(lái)中止刪除操作并將文檔對(duì)象恢復(fù)到原來(lái)的狀態(tài)。noderemoved:當(dāng)文檔中的某個(gè)節(jié)點(diǎn)被刪除后觸發(fā)。這三類事件的類型均是
14、xmlnodechangedeventhandler。10.4 .net對(duì)xml sax的模擬:xml還有另外一種標(biāo)準(zhǔn)接口稱為sax接口。sax的全稱是simple application for xml。簡(jiǎn)單是sax的一大特性,sax是由事件驅(qū)動(dòng)的。當(dāng)xml解析器遇到特定的事件時(shí)會(huì)調(diào)用不同的函數(shù)來(lái)處理,特定事件sax接口只是調(diào)用相應(yīng)的函數(shù)對(duì)于數(shù)據(jù)的處理是函數(shù)完成的。sax對(duì)于數(shù)據(jù)文檔的訪問(wèn)是順序的從文檔開始到文檔結(jié)束,不能隨機(jī)地訪問(wèn)文檔中任意數(shù)據(jù),這是因?yàn)閟ax沒(méi)有將所有的文檔數(shù)據(jù)放入內(nèi)存。sax的優(yōu)勢(shì)主要體現(xiàn)在:(1) 當(dāng)xml文檔比較龐大時(shí)使用dom接口會(huì)占用大量的內(nèi)存空間,而sax接口
15、所需要的空間要小得多,不需要額外的空間。(2) sax允許在任何情況下中斷解析進(jìn)程。(3) sax不必解析整個(gè)xml文檔,然后將所需要的信息返回。(4) 使用dom接口可使用的只有元素和指令等低級(jí)對(duì)象而使用sax可以更高效的創(chuàng)建這樣的文檔數(shù)據(jù)結(jié)構(gòu)。精品.在.net framework中主要使用xmlreader和xmlwriter兩個(gè)類來(lái)模擬sax接口數(shù)據(jù)訪問(wèn)方式。10.4.1 xmlreader和xmlwriter: xmlreader:xmlreader使用一種稱為拉模式的方法訪問(wèn)xml文檔。推模式是解析器每次獨(dú)到屬性處理指令等內(nèi)容都要向客戶程序通報(bào),然后由客戶程序處理這些
16、數(shù)據(jù)內(nèi)容。拉模式中解析器只會(huì)通報(bào)由客戶程序指定的數(shù)據(jù)內(nèi)容。具體可提供的xmlreader有:(1) xmltextreader:用程序使用xmltextreader訪問(wèn)xml數(shù)據(jù)是比較常用的方法,xmltextreader不支持dtd和schema。(2) xmlnodereader:xmlnodereader將xml文檔解析為dom樹后xmlnodereader類的實(shí)例指針提供對(duì)dom樹中xmlnode對(duì)象的解析。(3) xmlvalidatingreader:xmlvalidatingreader的實(shí)例指針根據(jù)dtd,xsd和xdr檢查xml數(shù)據(jù)類型的有效性,通過(guò)validationtyp
17、e屬性可以決定檢查的規(guī)則類型。(4) 實(shí)現(xiàn)xmlreader創(chuàng)建自定義reader:可以根據(jù)不同的需要編寫自己的類或擴(kuò)展現(xiàn)有的類實(shí)現(xiàn)有特殊要求的xml文檔數(shù)據(jù)訪問(wèn)。 xmlreader的作用:10.4.2 其他方法和屬性:精品.10.5 xmlwriter的應(yīng)用(xmltextwriter):xmltextwriter是xmlwriter的實(shí)現(xiàn)類,提供快速、非緩沖、只進(jìn)方法的編寫器,用以操作xml數(shù)據(jù)。xmltextwriter對(duì)象包含了很多可用于在創(chuàng)建xml文件時(shí)添加元素和屬性到xml文件里的方法,比較重要的是:writestartdocument():創(chuàng)建xml文件首先就需要用到這個(gè)方法,它是在創(chuàng)建xml文件的第一行代碼,用來(lái)指定該文件xml文件以及設(shè)置它的編碼類型。writestartelement(string):這個(gè)方法的作用是在xml文件中創(chuàng)建新元素,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中電建水電開發(fā)集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 2026年嵊泗島城燃?xì)庥邢薰具\(yùn)行保障員招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2026年中國(guó)外運(yùn)長(zhǎng)航集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2026年國(guó)核自儀系統(tǒng)工程有限公司招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 2026年中核礦業(yè)科技集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2026年中山市三角鎮(zhèn)水務(wù)事務(wù)中心公開招聘水閘、泵站管理人員備考題庫(kù)完整參考答案詳解
- 2026年嘉興市秀水高級(jí)中學(xué)公開招聘教師備考題庫(kù)及參考答案詳解
- 2026年成都市雙流區(qū)機(jī)關(guān)第二幼兒園招聘幼兒教師2名備考題庫(kù)及參考答案詳解1套
- 2026年云南農(nóng)墾集團(tuán)有限責(zé)任公司招聘?jìng)淇碱}庫(kù)及答案詳解一套
- 2026年共和縣廿地鄉(xiāng)衛(wèi)生院招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 輸電線路工程施工安全管理及風(fēng)險(xiǎn)控制方案
- 2025年鄭州公用事業(yè)投資發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 四川省成都市青羊區(qū)實(shí)驗(yàn)中學(xué)七年級(jí)上學(xué)期期末英語(yǔ)試題(附答案)
- 電力企業(yè)突發(fā)事件應(yīng)急處置案例分析
- 北京市豐臺(tái)區(qū)2024-2025學(xué)年上學(xué)期七年級(jí)期末英語(yǔ)試題(含答案)
- 《性病防治知識(shí)講座》課件
- 殘疾人社區(qū)康復(fù)區(qū)建設(shè)方案模版(3篇)
- 主要施工機(jī)械設(shè)備、勞動(dòng)力、設(shè)備材料投入計(jì)劃及其保證措施
- 山林地租賃合同書范例
- 鋼筋工安全晨會(huì)(班前會(huì))
- 游戲公司運(yùn)營(yíng)風(fēng)險(xiǎn)控制預(yù)案
評(píng)論
0/150
提交評(píng)論