最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于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)存中去操作,這樣做操作簡(jiǎn)單,但是很費(fèi)內(nèi)存,而在有些場(chǎng)景下我們必須考慮盡可能節(jié)省內(nèi)存.這時(shí)候就該XmlReader和XmlWriter出場(chǎng)了。
XmlReader讀取Xml需要通過(guò)Read()實(shí)例方法,不斷讀取Xml文檔中的聲明,節(jié)點(diǎn)開(kāi)始,節(jié)點(diǎn)內(nèi)容,節(jié)點(diǎn)結(jié)束,以及空白等等,直到文檔結(jié)束,Read()方法返回false。
如下讀取Xml內(nèi)容實(shí)例代碼和注釋說(shuō)明
復(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>"))
            {
                //通過(guò)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);
                        //如果是開(kāi)始節(jié)點(diǎn)
                        if (rdr.NodeType == XmlNodeType.Element) {
                            //通過(guò)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")
                            {
                                //可以通過(guò)中括號(hào)獲得屬性值
                                string colorVal = rdr["color"];
                                Console.WriteLine("\tcat's color is " + colorVal);

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

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



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

相關(guān)文章

最新評(píng)論

德格县| 佛教| 尉氏县| 南阳市| 彭水| 米脂县| 新平| 双鸭山市| 武胜县| 车致| 新巴尔虎左旗| 商洛市| 黑山县| 株洲县| 武隆县| 广河县| 北辰区| 石景山区| 乾安县| 平和县| 蒙阴县| 民县| 周口市| 永顺县| 宁津县| 呼伦贝尔市| 莱州市| 隆回县| 邵阳县| 萝北县| 历史| 湘阴县| 辽宁省| 聂荣县| 南郑县| 古蔺县| 全南县| 衡阳市| 石林| 墨脱县| 县级市|