مقدمه
در این مقاله نحوه خواندن داده های XML با استفاده از شی XmlDocument را مورد بحث قرار خواهیم داد. میتوانیم دادهها را از طریق متد SelectNodes() بخوانیم که شی XMlNodeList را برمیگرداند و حاوی لیستی از گرهها بر اساس رشته xpath است. اما اگر دادههای XML حاوی فضای نام باشد، کد معمولی کار نخواهد کرد. باید شی XmlNamespaceManager ایجاد کنیم و با شی XmlDocument تزریق کنیم.
همچنین می توانیم داده های XML را از طریق LINQ بخوانیم. اگر کنجکاو هستید که بدانید چگونه داده های XML را از طریق LINQ واکشی کنید، از اینجا دیدن کنید.
با استفاده از کد
اجازه دهید داده های XML را که حاوی ویژگی فضای نام هستند تعریف کنیم. در دادههای XML زیر، تگ Body حاوی ویژگی فضای نام بهعنوان xmlns است که حاوی مقداری بهعنوان
« http://schemas.xmlsoap.org/soap/envelope/ » است.
- string xmlContent = @"<?xml version='1.0' encoding='utf-8'?>
- <Body xmlns='http://schemas.xmlsoap.org/soap/envelope/'>
- <Site Id='1'>
- <Url>http://www.c-sharpcorner.com</Url>
- <Description>A social community for developers and programmers.</Description>
- </Site>
- <Site Id='2'>
- <Url>http://www.codeproject.com</Url>
- <Description>Itwas formed to provide developers with a place to meet.</Description>
- </Site>
- </Body>";
قطعه کد زیر خواندن داده های XML را تعریف می کند. ابتدا شی XmlDocument را ایجاد می کند و محتوای xml را از طریق متد LoadXml() روی آن بارگذاری می کند . در مرحله دوم، XmlNamespaceManager را ایجاد می کند و فضای نام را با استفاده از متد AddNamespace() اضافه می کند . ثالثاً، شی NamespaceManger را با متد SelectNodes() تزریق می کند و شی XmlNodeList را برمی گرداند. در نهایت روی گره لیست حلقه می زند و تمام مقادیر مورد نیاز را دریافت می کند. نتیجه در شکل 1 نشان داده شده است.
- XmlDocument doc = new XmlDocument();
- doc.LoadXml(xmlContent);
- // Creating namespace object
- XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
- nsmgr.AddNamespace("ns", "http://schemas.xmlsoap.org/soap/envelope/");
- // Fteching nodelist with injecting XML namespace object
- XmlNodeList xNode = doc.SelectNodes("ns:Body/ns:Site", nsmgr);
- foreach (XmlNode xndNode in xNode)
- {
- string Id = xndNode.Attributes["Id"].InnerText;
- Console.WriteLine("Id: " + Id);
- string Url = xndNode["Url"].InnerText;
- Console.WriteLine("Url: " + Url);
- string Description = xndNode["Description"].InnerText;
- Console.WriteLine("Description: " + Description);
- }
خروجی
شکل 1: نتیجه خواندن داده ها از XML
فرض کنید نیازی وجود دارد که می خواهید جزئیات سایتی را که شناسه آن 1 است واکشی کنید. در کد زیر ما باید فقط در رشته فیلتر (رشته xpath) خود را تغییر دهیم - " [@ Id= '1'] " اضافه شد.
- XmlNodeList xnList = doc.SelectNodes("ns:Body/ns:Site[@Id='1']", nsmgr);
- foreach (XmlNode xn in xnList)
- {
- string Url = xn["Url"].InnerText;
- string Description = xn["Description"].InnerText;
- }
نتیجهگیری
در این وبلاگ نحوه خواندن دادههای XML زمانی که حاوی فضای نام است بحث کردیم. همچنین نحوه پرس و جو/فیلتر کردن داده های XML با استفاده از شی XmlDocument را مورد بحث قرار دادیم.