




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精品文檔讀取XML至IListBox/ComboBox1,知識(shí)需求:(1)訪問XML文件的兩個(gè)基本模型:一,DOM模型;使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機(jī)訪問文檔中的數(shù)據(jù),可以使用XPath查詢,但是,DOM的缺點(diǎn)在于它需要一次性的加載整個(gè)文檔到內(nèi)存中,對于大型的文檔,這會(huì)造成資源問題。二,流模型;流模型很好的解決了這個(gè)問題,因?yàn)樗鼘ML文件的訪問采用的是流的概念,也就是說,任何時(shí)候在內(nèi)存中只有當(dāng)前節(jié)點(diǎn),但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執(zhí)行向后導(dǎo)航操作。雖然是各有千秋,但我們也可以在程序中兩者并用實(shí)現(xiàn)優(yōu)劣互補(bǔ)。C#采用流模型。流模型每次迭代XML文檔
2、中的一個(gè)節(jié)點(diǎn),適合于處理較大的文檔,所耗內(nèi)存空間小。流模型中有兩種變體“推"push模型和pull“拉”模型。推模型也就是常說的SAXSAX是一種靠事件驅(qū)動(dòng)的模型,也就是說:它每發(fā)現(xiàn)一個(gè)節(jié)點(diǎn)就用推模型引發(fā)一個(gè)事件,而我們必須編寫這些事件的處理程序,這樣的做法非常的不靈活,也很麻煩。.NET中使用的是基于拉”模型的實(shí)現(xiàn)方案,拉”模型在遍歷文檔時(shí)會(huì)把感興趣的文檔部分從讀取器中拉出,不需要引發(fā)事件,允許我們以編程的方式訪問文檔,這大大的提高了靈活性,在性能上拉”模型可以選擇性的處理節(jié)點(diǎn),而SAX每發(fā)現(xiàn)一個(gè)節(jié)點(diǎn)都會(huì)通知客戶機(jī),從而,使用拉”模型可以提高Application的整體效率。在.N
3、ET中拉”模型是作為XmlReader類(抽象類)實(shí)現(xiàn)的(2) XmlReader類Representsareaderthatprovidesfast,non-cached,forward-onlyaccesstoXMLdata.該類中有三個(gè)重要的衍生類:XmlTextReader;XmlTextValidatingReader;XmlNodeReader(3) XmlNodeType枚舉該枚舉里面有很多實(shí)用的數(shù)。2,案例(VS2008+XML)'用XM欣件讀取壁口I三""百ILtncml用operFileOialaglForm1.cs*usingSystem;us
4、ingSystem.Collections.Generic;精品文檔精品文檔usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;namespaceDemoXmlReaderpublicpartialclassXmlForm:FormpublicXmlForm()InitializeComponent();privatevoidbtnReaderXML_Click(obj
5、ectsender,EventArgse)XmlReaderxr=newXmlReader(txtPath.Text,lbxml);try/xr.EachXmlToListBox();xr.ReadXmlTextToListBox();/xr.ReadXml();catch(XmlExceptionxe)MessageBoxShow(xe.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);catch(Exceptionexp)MessageBoxShow(exp.ToString(),"Er
6、ror",MessageBoxButtons.OK,MessageBoxIcon.Error);finallyxr.Dispose();privatevoidbutton1_Click(objectsender,EventArgse)精品文檔精品文檔(OpenFileDialogofd=newOpenFileDialog();ofd.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);/指定默認(rèn)打開的窗口指向的文件ofd.ShowDialog();txtPath.Text=o
7、fd.FileName;把路徑復(fù)制給txtPath文本框privatevoidbtnReaderXmlToCb_Click(objectsender,EventArgse)(XmlReaderxr=newXmlReader(txtPath.Text,cbxml);try(xr.EachXmlToComboBox();catch(XmlExceptionxe)(MessageBoxShow(xe.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);catch(Exceptionexp)(MessageBo
8、xShow(exp.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);finally(xr.Dispose();classXmlReader:IDisposable(privatestringxmlPath;privateconststringERRMSG="ErrorocurredWhileReading"privateListBoxlistbox;privateComboBoxombobox;privateXmlTextReaderxtr;#regionXmlReader構(gòu)造器
9、精品文檔精品文檔publicXmlReader()(this.xmlPath=string.Empty;this.xtr=null;this.listbox=null;publicXmlReader(stringxmlPath,ListBoxlistbox)(this.xmlPath=xmlPath;this.listbox=listbox;publicXmlReader(stringxmlPath,ComboBoxombobox)(bobox=combobox;this.xmlPath=xmlPath;#endregion#regionXmlReader資源釋放方法publicvoidDis
10、pose()(this.Dispose(true);GCSuppressFinalize(this);protectedvirtualvoidDispose(booldisposing)(if(!disposing)(return;if(this.xtr!=null)(this.xtr.Close();this.xtr=null;if(this.xmlPath!=null)(this.xmlPath=null;精品文檔精品文檔#endregion#regionXmlReader的屬性publicListBoxlistBox(getreturnlistbox;setlistbox=value;p
11、ublicComboBoxomboBoxgetreturncombobox;setcombobox=value;publicstringXmlPathgetreturnxmlPath;setxmlPath=value;#endregion#region遍歷xml文件publicvoidEachXmlToListBox()listbox.Items.Clear();xtr=newXmlTextReader(xmlPath);trywhile(xtr.Read()if(xtr.NodeType!=XmlNodeTypeXmlDeclaration)listbox.Items.Add(xtr.Val
12、ue);catch(XmlExceptionxe)thrownewXmlException(ERRMSG+xe.Message);finallyif(xtr!=null)精品文檔精品文檔xtr.Close();)publicvoidEachXmlToComboBox()(combobox.Items.Clear();xtr=newXmlTextReader(xmlPath);try(while(xtr.Read()(if(xtr.NodeType!=XmlNodeTypeXmlDeclaration)combobox.Items.Add(xtr.Value);)catch(XmlExcepti
13、onxe)(thrownewXmlException(ERRMSG+xe.Message);)finally(if(xtr!=null)(xtr.Close();)#endregion#region讀取XM戊;件publicvoidReadXml()(stringattAndEle=string.Empty;listbox.Items.Clear();this.xtr=newXmlTextReader(this.xmlPath);/通過路徑,讀取XM戊;件精品文檔精品文檔try(while(xtr.Read()按照流方式一個(gè)節(jié)點(diǎn)一個(gè)節(jié)點(diǎn)的被動(dòng)讀取。ifthenextnodewasreadsuc
14、cessfully,returntrue(/publicenumXmlNodeType為枚舉類型,NoneElementAttributeTextCDATAEntityReferenceEntityProcessingInstructionCommentDocumentDocumentTypeDocumentFragmentNotationWhitespaceSignificantWhitespaceEndElementEndEntityXmlDeclarationif(xtr.NodeType=XmlNodeTypeXmlDeclaration)/XmlDeclaration為XML聲明(例
15、如,<?xmlversion='1.0'?>)(listbox.Items.Add(string.Format("<?01?>",xtr.Name,xtr.Value);/name為節(jié)點(diǎn)名;value為節(jié)點(diǎn)內(nèi)容elseif(xtr.NodeType=XmlNodeTypeElement)/Element元素(例如,<item>)attAndEle=string.Format("<0",xtr.Name);if(xtr.HasAttributes)/ifthecurrentnodehasattrib
16、utes,returntruewhile(xtr.MoveToNextAttribute()/ifthereisanextattribute,returntrueattAndEle+=string.Format("0=""1""",xtr.Name,xtr.Value);attAndEle=attAndEle.Trim()+">"listbox.Items.Add(attAndEle);elseif(xtr.NodeType=XmlNodeTypeEndElement)/Anendelementtag(for
17、example,</item>).listbox.Items.Add(string.Format("</0>",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讀取XM廝有文本節(jié)點(diǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 期刊編輯的學(xué)術(shù)期刊版權(quán)風(fēng)險(xiǎn)管理考核試卷
- 建筑工程用機(jī)械設(shè)備的電氣控制系統(tǒng)改進(jìn)考核試卷
- 方便面生產(chǎn)設(shè)備的選型與使用維護(hù)考核試卷
- 增強(qiáng)現(xiàn)實(shí)教具探索考核試卷
- 掌握關(guān)鍵對話實(shí)現(xiàn)有效溝通考核試卷
- 信托在文化資產(chǎn)交易平臺(tái)建設(shè)的投資管理與運(yùn)營考核試卷
- 出租舊廟合同范本
- 別墅電梯保養(yǎng)合同范本
- 體育賽事策劃及運(yùn)營服務(wù)合同
- 會(huì)議組織及參展合同
- 醫(yī)科大學(xué)新造校區(qū)二期工程環(huán)評報(bào)告公示
- JC-019粉煤灰檢測報(bào)告
- VTE相關(guān)知識(shí)考核試題及答案
- 高中語文教學(xué)課例《沁園春長沙》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 三生公司獎(jiǎng)金制度
- 神經(jīng)病學(xué)-緒論課件
- 危險(xiǎn)化學(xué)品全表
- 公路施工技術(shù)全套課件
- 胸痹心痛中醫(yī)診療方案及臨床路徑
- 泛讀2unit2-music
- 中學(xué)生防溺水安全教育課件(PPT 44頁)
評論
0/150
提交評論