کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش خواندن فایل XML با کلاس XMLReader در C#

آموزش خواندن فایل های XML به وسیله کلاس XMLReader در زبان C# :

به طور کلی 2 متد برای خواندن فایل های XML در زبان C# وجود دارد :

  • کلاس xmlDocument .
  • کلاس XMLReader .

کلاس XMLDocument کل محتویات فایل XML را خوانده و در حافظه سیستم قرار می دهد. سپس به شما امکان می دهد به راحتی درون فایل XML به جلو و عقب حرکت کرده و حتی با استفاده از تکنولوژی XPath ، جستجو یا query مورد نظر خود را بر روی فایل انجام دهید.
کلاس XMLReader، گزینه ای سریع تر و کمتر حافظه بر (memory consuming) بر خواندن فایل های XML می باشد. کلاس XMLReader به شما امکان می دهد تا در هر لحظه به وسیله فقط یک المنت، درون محتویات فایل XML حرکت کرده و همزمان مقدار value ها را خوانده و سپس به المنت بعدی در فایل بروید. با انجام اعمال فوق، بدیهی است که برنامه حافظه بسیار کمتری را اشغال می کند، زیرا در هر لحظه فقط مقدار المنت جاری را در خود نگهداری خواهد کرد. علاوه بر این، به دلیل این که می توانید به صورت دستی مقدار هر value را چک کنید، مستقیما به مقادیر مورد نظر خود دسترسی خواهید داشت و این مسئله کار را بسیار سریع تر می کند.
در این درس، بر روی کار با کلاس XMLReader تمرکز کرده و در درس بعدی به آموزش کلاس XMLDocument Class خواهیم پرداخت.
برای آموزش عملی مباحث، بیایید با یک مثال کوچک کار کنیم که در آن یک فایل XML حاوی نرخ های ارز (currency rates) را خواهیم خواند. برای این منظور از یک فایل XML مربوط به بانک مرکزی اروپا استفاده می کنیم. می توانید این فایل را دانلود کرده و از روی هارد دیسک بخوانید. اما درواقع هر دو کلاس XMLReader و کلاس XMLDocument می توانند به خوبی، محتویات یک فایل XML را از روی یک آدرس Url بر روی یک سرور را ه دور همانند فایل های لوکال بخوانند و فایل XML مثال را می توانید از آدرس + آدرس مشاهده نمایید، در کد مثال زیر، بخشی از این فایل را استفاده خواهیم کرد :

using System;
using System.Text;
using System.Xml;

namespace ParsingXml
{
    class Program
    {
        static void Main(string[] args)
        {            
            XmlReader xmlReader = XmlReader.Create("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
            while(xmlReader.Read())
            {
                if((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "Cube"))
                {
                    if(xmlReader.HasAttributes)
                        Console.WriteLine(xmlReader.GetAttribute("currency") + ": " + xmlReader.GetAttribute("rate"));                    
                }
            }
            Console.ReadKey();
        }
    }
}
            

در ابتدای کار یک نسخه جدید از کلاس XMLReader Class را با استفاده از متد Create() ایجاد کرده ایم. این متد چندین overload (مجموعه پارامتر) را می تواند دریافت کند، اما ساده ترین حالت آن ارسال یک Url با آدرس فایل XML مورد نظر برای خواندن است. درون حلقهwhile loop، متد Read() را بر روی نسخه ایجاد شده از کلاس XMLReader فراخوانی می کنیم. این حلقه، خواننده فایل یا Reader را به المنت بعدی در فایل منتقل کرده و در صورت وجود داشتن المنت ی دیگر، مقدار true را بر می گرداند تا عملیات جستجو همچنان ادامه داشته باشد. با تمام المنت های فایل و صدور مقدار false، اجرای حلقه و خواندن فایل متوقف خواهد شد. در درون حلقه while loop می توانید از خواص (properties) و متدهای (methods) متنوع کلاس XMLReader برای دسترسی به اطلاعات المنت جاری یا مورد نظر خود استفاده کنید.
در مثال فوق، ابتدا خاصیت NodeType را چک کرده تا مطمئن شده فایل دارای المنت (قسمت tag) بوده و همچنین آیا نام آن برابر با “Cub” است یا خیر. همانطور که در فایل XML مثال می توانید ببینید، هر نرخ ارز (currency rate) دارای یک المنت با نام تگ Cube می باشد و این دقیقا چیزی است که ما به دنبال آنیم. به محض پیدا کردن یک المنت Cube، یک چک فرمت (format check) انجام داده تا ببینیم آیا المنت ما دارای خواص (attributes) یوده و یا خیر و سپس توسط متد Get Attribute() مقدار دو خاصیت “currency” و “rate” را می خوانیم. در نهایت مقادیر دو خاصیت را در خروجی چاپ کرده و به سراغ المنت بعدی می رویم. خروجی کد مثال فوق، بایستی لیستی از Currency های موجود و نرخ آن ها (rate) باشد.
همانطور که مشاهده کردید روند کار بسبار ساده بود. البته این بیشتر به دلیل این است که ما اطلاعات را به همان ترتیبی که خواندیم، نیاز داشتیم، بدون این که عملیات خاصی بر روی آن ها انجام دهیم. به عبارت دیگر، وقتی لیستی از داده ها را به صورت لیست ترتیبی نمایش دادیم. در درس بعدی، به آموزش نحوه خواندن فایل های XML با استفاده از کلاس XMLDocument Class خواهیم پرداخت و تفاوت کار را مشاهده می کنید.

نکته :

بابیستی اطلاع داشته باشید که راه های زیادی وجود داشته که اجرای کد فوق با اشکال رو به رور شود و برنامه خطا یا exception صادر کند. بنابراین بایستی آمادگی مدیریت خطاهای احتمالی را داشته باشید، برای این منظور به درس آموزش مدیریت خطا یا exception در زبان C# بروید.

1395/08/10 12577 2415
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...