LINQ to XML

دات نت چندین تکنیک برای دسترسی و دستکاری یک فایل XML در اختیار ما می‌گذارد. در درس‌های قبلی از XmlReader یا دیگر کلاس‌های XML DOM مانند XmlDocument ،XmlElement و XmlComment استفاده کردید. همچنین با استفاده از زبانهای پرس و جوی XML از جمله XPath و XQuery توانستید عناصر خاصی از سند XML را انتخاب نمایید. حال مشکل اینجاست که شما با زبان‌هایی سر و کار دارید که هیچ چیزی برای کار با سی شارپ در اختیار شما قرار نمی‌دهند. اینجاست که LINQ to XML وارد عمل می‌شود. با استفاده از LINQ to XML شما می‌توانید از عملگرهای LINQ برای دستکاری و ایجاد اسناد XML استفاده کنید. حال اجازه دهید که یک مثال ساده از LINQ to XML را بررسی کنیم. یک سند XML با مقادیر زیر ایجاد کنید.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Persons>
  <Person name="John Smith">
    <Age>30</Age>
    <Gender>Male</Gender>
  </Person>
  <Person name="Mike Folley">
    <Age>25</Age>
    <Gender>Male</Gender>
  </Person>
  <Person name="Lisa Carter">
    <Age>22</Age>
    <Gender>Female</Gender>
  </Person>
  <Person name="Jerry Frost">
    <Age>27</Age>
    <Gender>Male</Gender>
  </Person>
  <Person name="Adam Wong">
    <Age>35</Age>
    <Gender>Male</Gender>
  </Person>
</Persons>

ویژوال استودیو را باز کرده و یک برنامه کنسول ایجاد و نام آن را LinqToXmlPractice بگذارید. بر روی نام پروژه در Solution Explorer کلیک راست کرده و از منوی باز شده گزینه New item را انتخاب کنید. از لیست ظاهر شده گزینه Xml file را انتخاب و نام آن را به sample.xml تغییر دهید. محتویات فایل ایجاد شده را پاک و مقادیر بالا را در آن کپی کنید.

فایل sample.xml شامل عناصر XML ی است که می‌خواهیم با آنها کار کنیم. فایل XML شامل یک عنصر ریشه به نام Persons است. این عنصر به نوبه خود دارای چندین عنصر فرزند به نام Person می‌باشد. هر عنصر Person دارای خواصی مانند نام (name)، سن (Age) و جنسیت (Gender) می‌باشد. الان می‌خواهیم با استفاده از LINQ نام هر شخص به دست بیاوریم. به محیط کدنویسی رفته و فضای نام زیر را به بخش فضاهای نامی اضافه کنید :

using System.Xml.Linq;

در داخل متد Main هم کد زیر را بنویسید :

XDocument doc = XDocument.Load(@"..\..\sample.xml");

var names = from d in doc.Root.Elements("Person")
            select d.Attribute("name").Value;

Console.WriteLine("Names of every person from the XML file.");

foreach (var name in names)
{
    Console.WriteLine("{0}", name);
}
Names of every person from the XML file.
John Smith
Mike Folley
Lisa Carter
Jerry Frost
Adam Wong

توضیح کامل کدها در درس‌های قبلی آمده است. مشاهده می‌کنید که با استفاده از LINQ to XML چقدر راحت می‌توانید با اسناد XML کار کنید.