آموزش نوشتن فایل XML با استفاده از کلاس XmlDocument در زبان C#

یک فایل XML را با استفاده از کلاس XmlWriter نوشتیم. اما در برخی از موارد، به خصوص ویرایش فایل های XML موجود، استفاده از کلاس XmlDocument کارآمدتر خواهد بود.

نکته :
در هنگام نوشتن فایل های XML با استفاده از کلاس XmlDocument بایستی به استفاده زیاد این کلاس از حافظه توجه کنید، به خصوص در هنگام کار با فایل های بزرگ که ممکن است باعث مشکل در اجرای برنامه شود.

کد زیر، مثال عملی از نوشتن فایل های xml با استفاده از کلاس XmlDocument را نشان می دهد.

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

namespace WritingXml
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement("users");
xmlDoc.AppendChild(rootNode);

XmlNode userNode = xmlDoc.CreateElement("user");
XmlAttribute attribute = xmlDoc.CreateAttribute("age");
attribute.Value = "42";
userNode.Attributes.Append(attribute);
userNode.InnerText = "John Doe";
rootNode.AppendChild(userNode);

userNode = xmlDoc.CreateElement("user");
attribute = xmlDoc.CreateAttribute("age");
attribute.Value = "39";
userNode.Attributes.Append(attribute);
userNode.InnerText = "Jane Doe";
rootNode.AppendChild(userNode);

xmlDoc.Save("test-doc.xml");
}
}
}
کد فوق، فایل xml زیر را تولید خواهد کرد :
John Doe
Jane Doe

همانطور که متوجه شدید، روش نوشتن فایل های XML با استفاده از کلاس XmlWriter کمی سنتی گرا تر (object oriented) بوده و نیازمند کدنویسی بیشتری است، کاری که ما انجام می دهیم، تولید یک نسخه جدید از شی XmlDocument Object است که المنت های جدید و خواص یا attributes را با استفتده از متدهای CreateElement() و CreateAttribute ایجاد می کند. هر زمانی که متدهای فوق فراخوانی می شوند، المنت جدید را یه به خود سند یا document اضافه کرده و یه به المنت زیری اضافه می شود. در مثال فوق، المنت “users” به صورت مستقیم به document اضافه شده، در حالی که المنت “user” به المنت اصلی یا rout element سند اضافه می شود. خواص یا attributes هم به المنت های مرتبط، توسط متد Append() متعلق به خاصیت Attribute property اضافه می شوند. کل فایل XML نیز در انتهای کد و توسط متد Save () بر روی دیسک ذخیره خواهد شد.
همانطور که قبلا هم اشاره کردیم، ایجاد فایل XML کلاس XmlDocument نیازمند نوشتن کد مشتری است. اما حالتی را در نظر بگیرید که نیاز دارید، وارد یک فایل XML شده و چندین مقدار را می خواهید تغییر دهید. در صورت استفاده از کلاس XmlWriter، مجبور هستید ابتدا کل اطلاعات فایل XML را با استفاده از XmlReader خوانده، بر روی دیسک نگهداری کرده، سپس آن را تغییر دهید. در نهایت کل فایل آپدیت شده XML را به صورت یکجا، مجددا بازنویسی کنید.
اما به دلیل این که کلاس XmlDocument همه چیز را در حافظه نگهداری می کند، به روز رسانی فایل های XML بسیار ساده تر خواهد بود. کد مثال عملی زیر، فایل “text-doc-xml” که در درس قبلی ایجاد نمودیم را باز کرده، و خاصیت age کلیه تگ های user آن را یک واحد افزایش می دهد. به نحوه کار دقت کنید :

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

namespace WritingXml
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("test-doc.xml");
XmlNodeList userNodes = xmlDoc.SelectNodes("//users/user");
foreach(XmlNode userNode in userNodes)
{
int age = int.Parse(userNode.Attributes["age"].Value);
userNode.Attributes["age"].Value = (age + 1).ToString();
}
xmlDoc.Save("test-doc.xml");
}
}
}

در کد مثال فوق، ابتدا فایل XML را لود کرده و به دنبال المنت های می گردیم. به صورت حلقه و تکرارگونه، هریک از مقادیر خاصیت های age را خوانده و در یک متغیر integer قرار می دهیم. سپس بعد از اضافه کردن یک واحد به خاصیت age، آن را مجددا در فایل بازنویسی می کنیم. در پایان نیز، کل سند XML را در درون همان فایل قبلی save کرده و اگر آن را مجددا باز کنید، خواهید دید سن هریک از کاربران یکسان بیشتر شده است.

شاید این مطالب را هم دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.