در مقاله ی قبلی به معرفی روش هایی جهت خواندن اطلاعات و کوئری
زدن و ... روی اسناد 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");
سورس انجام شده در این مقاله از لینک
بالای صفحه قابل دریافت می باشد.