a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

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

2020-01-24 03:18:17
字體:
來源:轉載
供稿:網友
XmlDocument和XElement在讀取Xml時要將整個Xml文檔放到內存中去操作,這樣做操作簡單,但是很費內存,而在有些場景下我們必須考慮盡可能節省內存.這時候就該XmlReader和XmlWriter出場了。
XmlReader讀取Xml需要通過Read()實例方法,不斷讀取Xml文檔中的聲明,節點開始,節點內容,節點結束,以及空白等等,直到文檔結束,Read()方法返回false。
如下讀取Xml內容實例代碼和注釋說明
復制代碼 代碼如下:

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的參數
            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靜態方法創建XmlReader實例
                using (XmlReader rdr = XmlReader.Create(strRdr))
                {
                    //循環Read方法直到文檔結束
                    while (rdr.Read())
                    {
                        Console.WriteLine("rdr.NodeType = " + rdr.NodeType);
                        //如果是開始節點
                        if (rdr.NodeType == XmlNodeType.Element) {
                            //通過rdr.Name得到節點名
                            string elementName = rdr.Name;

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

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

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

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



從圖中可以看到XmlReader在讀取這段Xml時:
第1次Read()讀取的是Xml文檔聲明部分
第2次Read()讀取的是聲明后的空白
第3次Read()讀取的是根節點root的開始標簽
第4次Read()讀取的是根節點開始后的空白
第5次Read()讀取的是cat節點的開始部分,從左尖括號到右尖括號包括該節點的屬性
第6次讀取的是cat節點的內容
第7次讀取的是cat節點的結束標簽
第8次讀取的是cat節點結束標簽后的空白
第9次讀取的是dog節點的開始部分,注意是從左尖括號開始到結束斜杠之前
第10次讀取的是dog標簽的結束/>
第11次讀取的是dog標簽結束后的空白
第12次讀取的是root的結束標簽
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久国产精品午夜一区 | 久久久99精品免费观看 | 精品一区视频 | 久久久久91| www.久久| 久久成人一区 | 国产激情久久久久久 | 精品一区不卡 | 成人免费网站www网站高清 | 欧美一级片在线观看 | 日产一区二区 | 国产精品久久久久久久一区探花 | 蜜臀久久99精品久久久无需会员 | 国产在线小视频 | 91精品国产综合久久久久久蜜臀 | 一区三区视频 | 九色影院 | 久久综合激情 | 国产一区在线免费 | 国内精品一区二区 | 成人免费淫片视频观 | 日韩精品一区二区在线 | 欧美一二三四成人免费视频 | 91福利在线播放 | 欧美日在线 | 黄色大片网站在线观看 | 91在线视频一区 | 一级毛片免费观看 | 精品在线免费播放 | 日韩免费在线播放 | 激情六月婷 | 亚洲综合精品 | 欧美激情视频一区二区三区在线播放 | 久久久久综合 | caoporn国产精品免费公开 | 污网站在线观看视频 | 欧美日韩国产一区二区三区 | 99国产精品 | 中文字幕高清 | 太平公主一级艳史播放高清 | 欧美国产一区二区 |