نحوه انجام اعمال متداول روی اسناد XML توسط LINQ to XML - قسمت دوم
  در این مقاله به معرفی نحوه ی انجام اعمال متداول بروز رسانی و حذف و ذخیره نمودن تغییرات، در اسناد XML و با استفاده از دستورات LINQ to XML می پردازیم
   LINQ
   ۸۸۳۴
   دانلود
   مرتضی صحراگرد
   ۱۳۸۹/۶/۱۸
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

در مقاله ی قبلی به معرفی روش هایی جهت خواندن اطلاعات و کوئری زدن و ... روی اسناد XML و با استفاده از LINQ to XML پرداختیم. برای مطالعه ی مقاله ی قبلی می توانید به لینک زیر مراجعه نمایید.

تذکر:

این مقاله، ادامه قسمت قبلی می باشد و ما از فایل XML مقاله ی قبلی استفاده می کنیم.

1 . چگونه می توان پس از انجام تغییرات، عمل ذخیره سازی را انجام داد؟

کلاس XElement دارای متدی به نام Save می باشد که آدرس فایل مقصد را گرفته و محتویات کلاس XElement را ذخیره می نماید.

به طور مثال در قسمت زیر ما محتویات فایل Employees.xml را لود نموده و سپس تغییرات مربوطه را اعمال نموده و ذخیره نموده ایم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");

//..
//Do some changes
//
 
xelement.Save("..\\..\\Employees.xml");

2 . چگونه می توان محتوای یک عنصر خاص را بروز رسانی نمود؟

اکنون قصد داریم نام کارمندی که شناسه ی کارمندی او 1 می باشد را به نام Michael تغییر دهیم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");
 
var employee = (from m in xelement.Elements()
                where m.Element("EmpId").Value == "1"
                select m).SingleOrDefault();
 
employee.SetElementValue("Name", "Michael");
 
xelement.Save("..\\..\\Employees.xml");

همانطور که در قطعه کد بالا ملاحظه می نمایید ما از متد SetElementValue جهت بروز رسانی محتوای یک عنصر استفاده نموده ایم. پارامتر اولی که برای این متد ارسال نموده ایم، نام عنصری می باشد که قصد بروز رسانی محتوای آن را داریم (در اینجا Name) و پارامتر دوم محتوای مورد نظرمان می باشد.

عنصر Name در ریشه ی عنصر employee قرار دارد. اگر بخواهیم به عنصر درونی تری دسترسی پیدا کنیم باید همانگونه که در مقاله ی قبلی آموختیم، از متد Element برای دسترسی به عنصر مربوطه استفاده کنیم.

به طور مثال اکنون قصد داریم محتوای آدرس شخص را بروز رسانی کنیم. در قطعه کد زیر ما نام خیابان را تغییر داده ایم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");
var employee = (from m in xelement.Elements()
                where m.Element("EmpId").Value == "1"
                select m).SingleOrDefault();

employee.Element("Address").SetElementValue("Street", "New Street Address");

xelement.Save("..\\..\\Employees.xml");

3 . چگونه می توان یک کارمند جدید را به انتهای لیست اضافه نمود؟

قبل از اینکه به تشریح نحوه ی انجام این کار بپردازیم باید بدانیم که برای ساختن محتوای XML می توان از کلاس XElement استفاده نمود.

هنگام ایجاد اشیاء XElement و در سازنده ی (Constructor) این کلاس، نام عنصر را به عنوان پارامتر اول و محتوای آن را به عنوان پارامتر دوم ارسال می کنیم. با توجه به اینکه فرمت پارامتر دوم نیز از نوع XElement می باشد، به شکل بسیار زیبا و خوانایی می توانیم عناصر تو در توی XML را ایجاد نماییم.

به عنوان پارامتر سوم هم می توانیم خصوصیات (Attribute) مورد نظر خود را توسط کلاس XAttribute ارسال نماییم.

در قسمت زیر ملاحظه می نمایید که یک کارمند جدید با استفاده از کلاس XElement ایجاد نموده و به انتهای لیست اضافه نموده ایم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");

var newEmployee = new XElement("Employee",
                               new XElement("EmpId", 5),
                               new XElement("Name", "George"),
                               new XElement("Sex", "Male"),
                               new XElement("Phone", "423-555-4224", new XAttribute("Type", "Home")),
                               new XElement("Phone", "424-555-0545", new XAttribute("Type", "Work")),
                               new XElement("Address",
                                            new XElement("Street", "Fred Park, East Bay"),
                                            new XElement("City", "Acampo"),
                                            new XElement("State", "CA"),
                                            new XElement("Zip", "95220"),
                                            new XElement("Country", "USA")));
 
xelement.Add(newEmployee);
xelement.Save("..\\..\\Employees.xml");

با استفاده از متد Add کارمند جدید را به انتهای لیست اضافه نموده ایم.

در صورتی که بخواهیم کارمند را به ابتدای لیست اضافه کنیم، کافیست که به جای متد Add از متد AddFirst استفاده نماییم.


4 .  چگونه می توان یک عنصر را در محل خاصی ایجاد نمود؟

اکنون قصد داریم یک کارمند جدید را پس از کارمند دوم وارد نماییم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");
 
var employee = (from m in xelement.Elements()
                where m.Element("EmpId").Value == "2"
                select m).SingleOrDefault();
 
var newEmployee = new XElement("Employee",
                               new XElement("EmpId", 5),
                               new XElement("Name", "George"),
                               new XElement("Sex", "Male"),
                               new XElement("Phone", "423-555-4224", new XAttribute("Type", "Home")),
                               new XElement("Phone", "424-555-0545", new XAttribute("Type", "Work")),
                               new XElement("Address",
                                            new XElement("Street", "Fred Park, East Bay"),
                                            new XElement("City", "Acampo"),
                                            new XElement("State", "CA"),
                                            new XElement("Zip", "95220"),
                                            new XElement("Country", "USA")));
 
employee.Add(newEmployee);
 
xelement.Save("..\\..\\Employees.xml");


5 . چگونه می توان یک عنصر خاص از تمامی کارمندان حذف نمود؟

در قطعه کدی زیر ما عنصر آدرس را از مشخصات تمامی کارمندان حذف نموده ایم.

XElement xelement = XElement.Load("..\\..\\Employees.xml");

var addresses = from m in xelement.Elements()
                select m.Elements("Address");

foreach (var address in addresses)
{
    address.Remove();
}

xelement.Save("..\\..\\Employees.xml");

 سورس انجام شده در این مقاله از لینک بالای صفحه قابل دریافت می باشد.