溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.NET Framework處理XML操作技巧是怎樣的呢

發(fā)布時(shí)間:2022-01-11 10:03:42 來源:億速云 閱讀:110 作者:柒染 欄目:編程語(yǔ)言

.NET Framework處理XML操作技巧是怎樣的呢,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

.NET Framework應(yīng)用范圍還是比較廣泛的。許多開發(fā)人員都會(huì)使用它來創(chuàng)造出一個(gè)適合開發(fā)的環(huán)境幫助我們提高開發(fā)效率。在.NET Framework出現(xiàn)之前,習(xí)慣使用MSXML服務(wù),一個(gè)基于COM的類庫(kù);寫Windows的XML的驅(qū)動(dòng)程序。不像.NET Framework中的類,MSXML類庫(kù)的部分代碼比API更深,它完全的嵌在操作系統(tǒng)的底層。

MSXML的確能夠與你的應(yīng)用程序通信,但是它不能真正 的與外部環(huán)境結(jié)合。 MSXML類庫(kù)能在win32中被導(dǎo)入,也能在CLR中運(yùn)用,但它只能作為一個(gè)外部服務(wù)器組件使用。但是基于.NET Framework的應(yīng)用程序能直接的進(jìn)行.NET Framework處理XML的其它命名空間整合使用,并且寫出來的代碼易于閱讀。

作為一個(gè)獨(dú)立的組件,MSXML分析器提供了一些高級(jí)的特性如異步分析。這個(gè)特性在.NET Framework中的XML類及.NET Framework的其它類都沒有提供,但是,.NET Framework中的XML類與其它的類整合可以很輕易的獲得相同的功能,在這個(gè)基礎(chǔ)上你可以增加更多的功能。

.NET Framework處理XML的類提供了基本的分析、查詢、轉(zhuǎn)換XML數(shù)據(jù)的功能。在.NET Framework中,你可以找到支持Xpath查詢和XSLT轉(zhuǎn)換的類,及讀/寫XML文檔的類。另外,.NET Framework也包含了其它處理XML的類,例如對(duì)象的序列化(XmlSerializer和the SoapFormatter類),應(yīng)用程序配置(AppSettingsReader類),數(shù)據(jù)存儲(chǔ)(DataSet類)。

既然XML是一種標(biāo)記語(yǔ)言,就應(yīng)該有一種工具按一定的語(yǔ)法來分析和理解存儲(chǔ)在文檔中信息。這個(gè)工具就是XML分析器——一個(gè)組件用于讀標(biāo)記文本并返回指定平臺(tái)的對(duì)象。

分析器的主要功能就是檢查XML文件是否有結(jié)構(gòu)上的錯(cuò)誤,剝離XML文件中的標(biāo)記,讀出正確的內(nèi)容,以交給下一步的應(yīng)用程序處理。XML是一種用來結(jié)構(gòu)化 文件信息的標(biāo)記語(yǔ)言,XML規(guī)范中對(duì)于如何標(biāo)記文件的結(jié)構(gòu)性有一個(gè)詳細(xì)的法則,解析器就是根據(jù)這些法則寫出來的軟件(多用Java寫成)。同HTML一 樣,在瀏覽器中,必須有HTML的分析器,這樣瀏覽器才能夠“讀懂”各種用HTML標(biāo)記所組成的網(wǎng)頁(yè),將它們顯示在我們面前。如果有瀏覽器的HTML解析 器讀不懂的標(biāo)記,將會(huì)返回給我們錯(cuò)誤信息。

所有的XML分析器,不管它屬于哪個(gè)操作平臺(tái),不外乎都分以下的兩類:基于樹或者基于事件的處理器。這兩類通常都是用XMLDOM(the Microsoft XML Document Object Model)和SAX(Simple API for XML)來實(shí)現(xiàn)。XMLDOM分析器是一個(gè)普通的基于樹的API,它把XML文檔當(dāng)成一個(gè)內(nèi)存結(jié)構(gòu)樹呈現(xiàn)。SAX分析器是基于事件的API,它處理每 個(gè)在XML數(shù)據(jù)流中的元素(它把XML數(shù)據(jù)放進(jìn)流中再進(jìn)行處理)。通常,DOM能被一個(gè)SAX流載入并執(zhí)行,因此,這兩類的處理不是相互排斥的。

總的來說,SAX分析器與XMLDOM分析器正好相反,它們的分析模式存在著極大的差別。XMLDOM被很好的定義在它的 functionalition集合里面,你不能擴(kuò)展它。當(dāng)它在處理一個(gè)大型的文檔時(shí),它要占用很大內(nèi)存空間來處理functionalition這個(gè)巨 大的集合。

SAX分析器利用客戶端應(yīng)用程序通過現(xiàn)存的指定平臺(tái)的對(duì)象的實(shí)例去處理分析事件。SAX分析器控制整個(gè)處理過程,把數(shù)據(jù)“推出”到處理程序,該處理程序依次接受或拒絕處理數(shù)據(jù)。這種模式的優(yōu)點(diǎn)是只需很少的內(nèi)存空間。

.NET Framework處理XML完全支持XMLDOM模式,但它不支持SAX模式。因?yàn)?NET Framework支持兩種不同的分析模式:XMLDOM分析器和XML閱讀器。它顯然不支持SAX分析器,但這并不意味它沒有提供類似SAX分析器的功 能。通過XML閱讀器SAX的所有的功能都能很容易的實(shí)現(xiàn)及更有效的運(yùn)用。不像SAX分析器,.NET Framework的閱讀器整個(gè)都運(yùn)作在客戶端應(yīng)用程序下面。這樣,應(yīng)用程序本身就可以只把真正需要的數(shù)據(jù)“推出”,然后從XML數(shù)據(jù)流中跳出來。而 SAX分析模式要處理所有的對(duì)應(yīng)用程序有用和無(wú)用的信息。

閱讀器是基于.NET Framework流模式工作的,它的工作方式類似于數(shù)據(jù)庫(kù)的游標(biāo)。有趣的是,實(shí)現(xiàn)類似游標(biāo)分析模式的類提供對(duì).NET Framework中的XMLDOM分析器的底層支持。XmlReader、XmlWriter兩個(gè)抽象類是所有.NET Framework中XML類的基礎(chǔ)類,包括XMLDOM類、ADO.NET驅(qū)動(dòng)類及配置類。所以在.NET Framework中你有兩種可選的方法去處理XML數(shù)據(jù)。用XmlReader和XmlWriter類直接處理XML數(shù)據(jù),或者用XMLDOM模式處理。

XML閱讀器支持一個(gè)編程接口,接口用于連接XML文檔,“推出”你要的數(shù)據(jù)。如果你更深入去了解閱讀器,你會(huì)發(fā)現(xiàn)閱讀器工作原理類似于我們的桌面 應(yīng)用程序從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)的原理。數(shù)據(jù)庫(kù)服務(wù)返回一個(gè)游標(biāo)對(duì)象,它包含所有查詢結(jié)果集,并返回指向目標(biāo)數(shù)據(jù)集的開始地址的引用。XML閱讀器的客戶端收 到一個(gè)指向閱讀器實(shí)例的引用。該實(shí)例提取底層的數(shù)據(jù)流并把取出的數(shù)據(jù)呈現(xiàn)為一棵XML樹。閱讀器類提供只讀、向前的游標(biāo),你可以用閱讀器類提供的方法滾動(dòng) 游標(biāo)遍歷結(jié)果集中的每一條數(shù)據(jù)。 從閱讀器中看XML文檔不是一個(gè)標(biāo)簽文本文件,而是一個(gè)序列化的節(jié)點(diǎn)集合。它是.NET Framework中的一種特殊的游標(biāo)模式;在.NET Framework中,你找不到其它的任何一個(gè)類似的API函數(shù)。

閱讀器和XMLDOM分析器有幾點(diǎn)不同的地方。XML閱讀器是只進(jìn)的,它沒有父、子、祖宗、兄弟節(jié)點(diǎn)的概念,而且是只讀的。在.NET Framework處理XML中,讀寫XML文檔是分為兩種完全不同的功能,分別由XmlReader和XmlWriter類來完成。要編輯XML文檔,你可以用 XMLDOM分析器。

.net framework處理xml主要包System.Xml命名空間當(dāng)中,而xml序列化則在System.Xml.Serialization 命名空間中,***簡(jiǎn)要說一下有關(guān)DTD的概念。

DTD(Document Type Definition,文檔類型定義)它是一種規(guī)范,可以使商業(yè)組織間進(jìn)行無(wú)縫的數(shù)據(jù)交換,打個(gè)比方,如果兩個(gè)同行業(yè)的公司A和B要用XML文件相互交換數(shù)據(jù),A公司用〈價(jià)格〉標(biāo)記來表示他們產(chǎn)品的價(jià)格信息,而B公司可能用〈售價(jià)〉表示價(jià)格信息。如果一 個(gè)XML應(yīng)用程序來讀取他們各自的XML文件中的信息時(shí),如果它只知道〈價(jià)格〉標(biāo)記里表示的是價(jià)格信息,那么B公司的價(jià)格信息就讀不出來,必將產(chǎn)生錯(cuò)誤。 顯然,對(duì)于想利用XML文件來交換信息的實(shí)體來說,他們之間必須有一個(gè)約定——即編寫XML文件可以用哪些標(biāo)記,母元素中能夠包括哪些子元素,各個(gè)元素出 現(xiàn)的順序,元素中的屬性怎樣定義等。這么人幫我們就可以輕松地依據(jù)這個(gè)DTD 編寫一個(gè)應(yīng)用程序,去網(wǎng)上將我們感興趣的東西自動(dòng)抓回來。 這就是所謂的DTD,A和B公司在交換數(shù)據(jù)時(shí)都必須遵循一種規(guī)范。

現(xiàn)在.NET Framework處理XML的方式中已經(jīng)有了好幾個(gè)定義好的DTD,如MathML、SMIL等。MathML‎(Mathematical Markup Language‎)即數(shù)學(xué)置標(biāo)語(yǔ)言是一種基于XML的標(biāo)準(zhǔn),用來在互聯(lián)網(wǎng)上書寫數(shù)學(xué)符號(hào)和公式的置標(biāo)語(yǔ)言。它是由W3C的數(shù)學(xué)工作組提出的。由于數(shù)學(xué)符號(hào)和公式的結(jié)構(gòu)復(fù)雜且符號(hào)與符號(hào)之間存在多種邏輯關(guān)系,MathML的格式十分繁瑣。這個(gè)東東太復(fù)雜了,我懶得去研究它,隨它吧。SMIL好像念作smile,是用來操縱多媒體片斷(對(duì)多媒體片斷的有機(jī)的、智能的組合)。 

看來這東西真的不錯(cuò)!SMIL語(yǔ)言是一套已經(jīng)規(guī)定好的而且非常簡(jiǎn)單的標(biāo)記。它用來規(guī)定多媒體片斷(這里多媒體的包括的范圍有:聲音文件、視頻文件、動(dòng)畫、圖片、文字等)在什么時(shí)候、在什么地方、以什么樣的方式播放。

看完上述內(nèi)容,你們掌握.NET Framework處理XML操作技巧是怎樣的呢的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

xml
AI