熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#高級編程:使用 XmlTextReader類[1]

2013-11-13 11:06:50  來源: .NET編程 
    ——此文章摘自《C#高級編程(第版)》定價元 特價元 購買

    如前所述XmlTextReader非常類似於SAX它們最大的一個區別是SAX是一種推模型(push model)它把數據拉入應用程序中開發人員必須接受它而XmlTextReader是一種拉模型把應用程序請求的數據拉入該應用程序這樣編程就有一種更簡單更直觀的模型另一個優點是拉模型(pull model)可以選擇把什麼數據傳送到應用程序中如果不需要所有的數據就不需要處理它們而在推模型中所有的XML數據都必須由應用程序處理無論是否需要這些數據

    下面介紹一個非常簡單的示例讀取XML數據再詳細介紹XmlTextReader類這些代碼在XmlReaderSample文件夾中現在用下面的代碼替換前面示例中的命名空間MSXML
    using SystemXml;

    還需要從模塊級代碼中刪除下述代碼行
    private DOMDocument doc;

    下面是按鈕的單擊事件處理程序
    protected void button_Click (object sender SystemEventArgs e)
    {
       //Modify this path to find booksxml
       string fileName = \\\\\\booksxml;
       //Create the new TextReader Object
       XmlTextReader tr = new XmlTextReader(fileName);
       //Read in a node at a time
       while(trRead())
       {
         if(trNodeType == XmlNodeTypeText)
          listBoxItemsAdd(trValue);
       }
    }

    這是XmlTextReader最簡單的用法首先用XML文件名創建一個字符串對象再創建一個新的XmlTextReader其參數為fileName字符串XmlTextReader目前有種不同的構造函數重載版本其參數是字符串(文件名和URL)流和NameTables的不同組合(當元素或屬性名出現幾次後它們就可以存儲到NameTable中這樣比較操作的速度會較快)

    在初始化一個XmlTextReader對象後沒有選擇任何節點只有在此時才沒有當前節點在開始trRead()循環後第一個Read()會進入文檔中的第一個節點這個節點一般是XML 聲明節點在本示例當進入每個節點時可比較trNodeType 和XmlNodeType枚舉找到一個文本節點後把該文本值添加到列表框是加載該列表框後的屏幕圖


圖 

    Read方法

    遍歷文檔有幾種方式如前面的示例所示Read()可以進入下一個節點然後查看該節點是否有一個值(HasValue())該節點是否有屬性(HasAttributes())也可以使用ReadStartElement()方法查看當前節點是否是起始元素如果是起始元素就可以定位到下一個節點上如果不是起始元素就引發一個XmlException調用這個方法與調用Read ()後再調用IsStartElement是一樣的

    ReadString() 和 ReadChars()方法都可以從元素中讀取文本數據ReadString()返回一個包含數據的字符串對象而ReadChars()把數據讀入字符數組

    ReadElementString() 類似於ReadString()但可以把元素名作為參數如果下一個Content節點不是起始標記或者Name屬性不匹配當前的節點Name就會引發異常

[]  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/15183.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.