版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Good is good, but better carries it.精益求精,善益求善。C讀取XML文件經(jīng)典案例-讀取XML到ListBox/ComboBox1,知識(shí)需求:(1)訪(fǎng)問(wèn)XML文件的兩個(gè)基本模型:DOM模型;使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機(jī)訪(fǎng)問(wèn)文檔中的數(shù)據(jù),可以使用XPath查詢(xún),但是,DOM的缺點(diǎn)在于它需要一次性的加載整個(gè)文檔到內(nèi)存中,對(duì)于大型的文檔,這會(huì)造成資源問(wèn)題。流模型;流模型很好的解決了這個(gè)問(wèn)題,因?yàn)樗鼘?duì)XML文件的訪(fǎng)問(wèn)采用的是流的概念,也就是說(shuō),任何時(shí)候在內(nèi)存中只有當(dāng)前節(jié)點(diǎn),但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執(zhí)行向后導(dǎo)航操作
2、。雖然是各有千秋,但我們也可以在程序中兩者并用實(shí)現(xiàn)優(yōu)劣互補(bǔ)。C#采用流模型。流模型每次迭代XML文檔中的一個(gè)節(jié)點(diǎn),適合于處理較大的文檔,所耗內(nèi)存空間小。流模型中有兩種變體“推”push模型和pull“拉”模型。推模型也就是常說(shuō)的SAX,SAX是一種靠事件驅(qū)動(dòng)的模型,也就是說(shuō):它每發(fā)現(xiàn)一個(gè)節(jié)點(diǎn)就用推模型引發(fā)一個(gè)事件,而我們必須編寫(xiě)這些事件的處理程序,這樣的做法非常的不靈活,也很麻煩。.NET中使用的是基于“拉”模型的實(shí)現(xiàn)方案,“拉”模型在遍歷文檔時(shí)會(huì)把感興趣的文檔部分從讀取器中拉出,不需要引發(fā)事件,允許我們以編程的方式訪(fǎng)問(wèn)文檔,這大大的提高了靈活性,在性能上“拉”模型可以選擇性的處理節(jié)點(diǎn),而SA
3、X每發(fā)現(xiàn)一個(gè)節(jié)點(diǎn)都會(huì)通知客戶(hù)機(jī),從而,使用“拉”模型可以提高Application的整體效率。在.NET中“拉”模型是作為XmlReader類(lèi)(抽象類(lèi))實(shí)現(xiàn)的(2)XmlReader類(lèi)Representsareaderthatprovidesfast,non-cached,forward-onlyaccesstoXMLdata.該類(lèi)中有三個(gè)重要的衍生類(lèi):XmlTextReader;XmlTextValidatingReader;XmlNodeReader(3)XmlNodeType枚舉該枚舉里面有很多實(shí)用的數(shù)。2,案例(VS2008+XML)Form1.cs*usingSystem;using
4、System.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;namespaceDemoXmlReaderpublicpartialclassXmlForm:FormpublicXmlForm()InitializeComponent();privatevoidbtnReaderXML_Click(objectsender,E
5、ventArgse)XmlReaderxr=newXmlReader(txtPath.Text,lbxml);try/xr.EachXmlToListBox();xr.ReadXmlTextToListBox();/xr.ReadXml();catch(XmlExceptionxe)MessageBox.Show(xe.ToString(),Error,MessageBoxButtons.OK,MessageBoxIcon.Error);catch(Exceptionexp)MessageBox.Show(exp.ToString(),Error,MessageBoxButtons.OK,Me
6、ssageBoxIcon.Error);finallyxr.Dispose();privatevoidbutton1_Click(objectsender,EventArgse)OpenFileDialogofd=newOpenFileDialog();ofd.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);/指定默認(rèn)打開(kāi)的窗口指向的文件ofd.ShowDialog();txtPath.Text=ofd.FileName;/把路徑復(fù)制給txtPath文本框privatevoidbt
7、nReaderXmlToCb_Click(objectsender,EventArgse)XmlReaderxr=newXmlReader(txtPath.Text,cbxml);tryxr.EachXmlToComboBox();catch(XmlExceptionxe)MessageBox.Show(xe.ToString(),Error,MessageBoxButtons.OK,MessageBoxIcon.Error);catch(Exceptionexp)MessageBox.Show(exp.ToString(),Error,MessageBoxButtons.OK,Message
8、BoxIcon.Error);finallyxr.Dispose();classXmlReader:IDisposableprivatestringxmlPath;privateconststringERRMSG=ErrorocurredWhileReading;privateListBoxlistbox;privateComboBoxcombobox;privateXmlTextReaderxtr;#regionXmlReader構(gòu)造器publicXmlReader()this.xmlPath=string.Empty;this.xtr=null;this.listbox=null;publ
9、icXmlReader(stringxmlPath,ListBoxlistbox)this.xmlPath=xmlPath;this.listbox=listbox;publicXmlReader(stringxmlPath,ComboBoxcombobox)bobox=combobox;this.xmlPath=xmlPath;#endregion#regionXmlReader資源釋放方法publicvoidDispose()this.Dispose(true);GC.SuppressFinalize(this);protectedvirtualvoidDispose(booldispos
10、ing)if(!disposing)return;if(this.xtr!=null)this.xtr.Close();this.xtr=null;if(this.xmlPath!=null)this.xmlPath=null;#endregion#regionXmlReader的屬性publicListBoxlistBoxgetreturnlistbox;setlistbox=value;publicComboBoxcomboBoxgetreturncombobox;setcombobox=value;publicstringXmlPathgetreturnxmlPath;setxmlPat
11、h=value;#endregion#region遍歷xml文件publicvoidEachXmlToListBox()listbox.Items.Clear();xtr=newXmlTextReader(xmlPath);trywhile(xtr.Read()if(xtr.NodeType!=XmlNodeType.XmlDeclaration)listbox.Items.Add(xtr.Value);catch(XmlExceptionxe)thrownewXmlException(ERRMSG+xe.Message);finallyif(xtr!=null)xtr.Close();pub
12、licvoidEachXmlToComboBox()combobox.Items.Clear();xtr=newXmlTextReader(xmlPath);trywhile(xtr.Read()if(xtr.NodeType!=XmlNodeType.XmlDeclaration)combobox.Items.Add(xtr.Value);catch(XmlExceptionxe)thrownewXmlException(ERRMSG+xe.Message);finallyif(xtr!=null)xtr.Close();#endregion#region讀取XML文件publicvoidR
13、eadXml()stringattAndEle=string.Empty;listbox.Items.Clear();this.xtr=newXmlTextReader(this.xmlPath);/通過(guò)路徑,讀取XML文件trywhile(xtr.Read()/按照流方式一個(gè)節(jié)點(diǎn)一個(gè)節(jié)點(diǎn)的被動(dòng)讀取。ifthenextnodewasreadsuccessfully,returntrue/publicenumXmlNodeType為枚舉類(lèi)型,NoneElementAttributeTextCDATAEntityReferenceEntityProcessingInstructionComment
14、DocumentDocumentTypeDocumentFragmentNotationWhitespaceSignificantWhitespaceEndElementEndEntityXmlDeclarationif(xtr.NodeType=XmlNodeType.XmlDeclaration)/XmlDeclaration為XML聲明(例如,)listbox.Items.Add(string.Format(,xtr.Name,xtr.Value);/name為節(jié)點(diǎn)名;value為節(jié)點(diǎn)內(nèi)容elseif(xtr.NodeType=XmlNodeType.Element)/Element元素
15、(例如,)attAndEle=string.Format(;listbox.Items.Add(attAndEle);elseif(xtr.NodeType=XmlNodeType.EndElement)/Anendelementtag(forexample,).listbox.Items.Add(string.Format(,xtr.Name);elseif(xtr.NodeType=XmlNodeType.Text)/Thetextcontentofanode.listbox.Items.Add(xtr.Value);catch(XmlExceptionxmlExp)thrownewXmlException(ERRMSG+this.xmlPath+xmlExp.ToString();finallyif(this.xtr!=null)this.xtr.Close();#endregion#region讀取XML所有文本節(jié)點(diǎn)值publicvoidRe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省宣城市皖東南第二次聯(lián)考2026屆九年級(jí)上學(xué)期12月月考語(yǔ)文試卷(含答案)
- 維修考試題及答案
- 2022秋人教版六年級(jí)上冊(cè)數(shù)學(xué)期末測(cè)試卷含答案(模擬題)
- 2022~2023醫(yī)院三基考試考試題庫(kù)及答案第192期
- 復(fù)工復(fù)產(chǎn)安全生產(chǎn)工作方案
- 鋼結(jié)構(gòu)邊緣加工技術(shù)要領(lǐng)
- 地下室施工技術(shù)要點(diǎn)
- 2026屆遼寧省丹東市高三上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)歷史試題(含答案)
- 市監(jiān)局防疫知識(shí)考試題及答案
- 上師大免疫學(xué)試題及答案
- 消化內(nèi)鏡ERCP技術(shù)改良
- 云南師大附中2026屆高三1月高考適應(yīng)性月考卷英語(yǔ)(六)含答案
- 2026湖北隨州農(nóng)商銀行科技研發(fā)中心第二批人員招聘9人筆試備考試題及答案解析
- 紀(jì)念館新館項(xiàng)目可行性研究報(bào)告
- 騎行美食活動(dòng)方案策劃(3篇)
- 石化企業(yè)環(huán)保培訓(xùn)課件
- 2026年呂梁職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試備考試題帶答案解析
- 中國(guó)高血糖危象診斷與治療指南
- 人教版三年級(jí)語(yǔ)文下冊(cè)《選讀課文8 除三害》優(yōu)質(zhì)教學(xué)設(shè)計(jì)教案-9
- 人民醫(yī)院檢驗(yàn)科程序文件
- 在BBO橋牌在線(xiàn)練習(xí)橋牌的步驟
評(píng)論
0/150
提交評(píng)論