欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C#中XmlReader讀取Xml的深入分析

 更新時(shí)間:2013年05月20日 09:04:28   作者:  
本篇文章是對(duì)C#中XmlReader讀取Xml進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
XmlDocument和XElement在讀取Xml時(shí)要將整個(gè)Xml文檔放到內(nèi)存中去操作,這樣做操作簡單,但是很費(fèi)內(nèi)存,而在有些場景下我們必須考慮盡可能節(jié)省內(nèi)存.這時(shí)候就該XmlReader和XmlWriter出場了。
XmlReader讀取Xml需要通過Read()實(shí)例方法,不斷讀取Xml文檔中的聲明,節(jié)點(diǎn)開始,節(jié)點(diǎn)內(nèi)容,節(jié)點(diǎn)結(jié)束,以及空白等等,直到文檔結(jié)束,Read()方法返回false。
如下讀取Xml內(nèi)容實(shí)例代碼和注釋說明
復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;

namespace UseXmlReader
{
    class Program
    {
        static void Main(string[] args)
        {
            //聲明StringReader傳入Xml文本,作為XmlReader.Create的參數(shù)
            using (StringReader strRdr = new StringReader(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<root>
    <cat color=""white"">I'm a Cat</cat>
    <dog color=""yellow""/>
</root>"))
            {
                //通過XmlReader.Create靜態(tài)方法創(chuàng)建XmlReader實(shí)例
                using (XmlReader rdr = XmlReader.Create(strRdr))
                {
                    //循環(huán)Read方法直到文檔結(jié)束
                    while (rdr.Read())
                    {
                        Console.WriteLine("rdr.NodeType = " + rdr.NodeType);
                        //如果是開始節(jié)點(diǎn)
                        if (rdr.NodeType == XmlNodeType.Element) {
                            //通過rdr.Name得到節(jié)點(diǎn)名
                            string elementName = rdr.Name;

                            Console.WriteLine(elementName + " element start");
                            if (elementName == "root") {

                            }
                            //讀取到cat元素 這時(shí)rdr.Read()讀取到的內(nèi)容為<cat color="white">
                            else if (elementName == "cat")
                            {
                                //可以通過中括號(hào)獲得屬性值
                                string colorVal = rdr["color"];
                                Console.WriteLine("\tcat's color is " + colorVal);

                                //讀取到節(jié)點(diǎn)內(nèi)文本內(nèi)容
                                if(rdr.Read()) {
                                    //通過rdr.Value獲得文本內(nèi)容
                                    Console.WriteLine("\t cat said:" + rdr.Value);
                                }
                            }
                        }
                        else if (rdr.NodeType == XmlNodeType.EndElement)
                        {
                            //在節(jié)點(diǎn)結(jié)束時(shí)也可以通過rdr.Name獲得節(jié)點(diǎn)名字
                            string elementName = rdr.Name;
                            Console.WriteLine(elementName + " element end");
                        }
                    }
                }
            }

            Console.Read();
        }
    }
}
如果覺得代碼不明白,下面是一張讀取順序圖,標(biāo)明了讀取順序號(hào)和每次讀取的內(nèi)容,如下圖所示:



從圖中可以看到XmlReader在讀取這段Xml時(shí):
第1次Read()讀取的是Xml文檔聲明部分
第2次Read()讀取的是聲明后的空白
第3次Read()讀取的是根節(jié)點(diǎn)root的開始標(biāo)簽
第4次Read()讀取的是根節(jié)點(diǎn)開始后的空白
第5次Read()讀取的是cat節(jié)點(diǎn)的開始部分,從左尖括號(hào)到右尖括號(hào)包括該節(jié)點(diǎn)的屬性
第6次讀取的是cat節(jié)點(diǎn)的內(nèi)容
第7次讀取的是cat節(jié)點(diǎn)的結(jié)束標(biāo)簽
第8次讀取的是cat節(jié)點(diǎn)結(jié)束標(biāo)簽后的空白
第9次讀取的是dog節(jié)點(diǎn)的開始部分,注意是從左尖括號(hào)開始到結(jié)束斜杠之前
第10次讀取的是dog標(biāo)簽的結(jié)束/>
第11次讀取的是dog標(biāo)簽結(jié)束后的空白
第12次讀取的是root的結(jié)束標(biāo)簽

相關(guān)文章

  • 淺談Java與C#的一些細(xì)微差別

    淺談Java與C#的一些細(xì)微差別

    說起C#和Java這兩門語言(語法,數(shù)據(jù)類型 等),個(gè)人以為,大概有90%以上的相似,甚至可以認(rèn)為幾乎一樣。但是在工作中,我也發(fā)現(xiàn)了一些細(xì)微的差別
    2013-11-11
  • C#將jpg轉(zhuǎn)換為pdf的方法

    C#將jpg轉(zhuǎn)換為pdf的方法

    這篇文章主要介紹了C#將jpg轉(zhuǎn)換為pdf的方法,主要通過itextsharp.dll文件實(shí)現(xiàn),是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫詳解

    c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫詳解

    在開發(fā)過程當(dāng)中,你一定遇到文件損壞活或丟失的煩惱,而每天備份又很麻煩,你只要設(shè)置每天備份的時(shí)間,并將程序加入啟動(dòng)項(xiàng)中,就可以自動(dòng)完成備份,這篇文章主要給大家介紹了關(guān)于c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題

    C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題

    這篇文章主要介紹了C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題 ,文中給大家列舉通過兩種方法來判斷,需要的朋友可以參考下
    2018-10-10
  • C#特性(Attribute)

    C#特性(Attribute)

    這篇文章介紹了C#的特性(Attribute),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • c#實(shí)現(xiàn)16進(jìn)制和字符串之間轉(zhuǎn)換的代碼

    c#實(shí)現(xiàn)16進(jìn)制和字符串之間轉(zhuǎn)換的代碼

    #中十六進(jìn)制字符串的轉(zhuǎn)換函數(shù)
    2007-05-05
  • C#學(xué)習(xí)筆記整理-迭代器模式介紹

    C#學(xué)習(xí)筆記整理-迭代器模式介紹

    下面小編就為大家分享一篇C#學(xué)習(xí)筆記整理-迭代器模式介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑

    如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑

    項(xiàng)目中少不了讀取或設(shè)置文件路徑的功能,如何才能對(duì)輸入的路徑是否合法進(jìn)行判斷呢?下面這篇文章主要給大家介紹了關(guān)于C#利用正則表達(dá)式判斷是否是有效的文件及文件夾路徑的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 一文帶你了解C#操作MySql的方法

    一文帶你了解C#操作MySql的方法

    工作中大多數(shù)情況下用的都是 MySql 但一直沒有記錄,相關(guān)操作。這篇文章以便 MySql.Data 庫進(jìn)行MySql操作,使用 C# 執(zhí)行 SQL 語句,造個(gè)輪子
    2023-03-03
  • Winform使用DataGridView實(shí)現(xiàn)下拉篩選

    Winform使用DataGridView實(shí)現(xiàn)下拉篩選

    這篇文章主要為大家詳細(xì)介紹了Winform如何使用原生DataGridView實(shí)現(xiàn)下拉篩選功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09

最新評(píng)論