PDA

View Full Version : آموزش: XML در سی شارپ



یونس ابراهیمی
دوشنبه 11 اسفند 1393, 10:33 صبح
زبان نشانه گذاری توسعه پذیر (XML) به شما اجازه می دهد که داده ها را در یک متن و قالب ساخت یافته ذخیره کنید. این زبان به طور گسترده به عنوان یک دیتابیس جایگزین و برای ذخیره اطلاعات مربوط به پیکربندی نرم افزارها به کار می رود. XML از لحاظ دستوری شبیه به HTML بوده و اگر با HTML آشنایی داشته باشید یادگیری این زبان برایتان راحت تر است. در زیر یک سند XML را مشاهده می کنید :


<Persons>
<Person>
<Name>John Smith</Name>
<Age>30</Age>
<Gender>Male</Gender>
</Person>
<Person>
<Name>Mike Folly</Name>
<Age>25</Age>
<Gender>Male</Gender>
</Person>
<Person>
<Name>Lisa Carter</Name>
<Age>22</Age>
<Gender>Female</Gender>
</Person>
</Persons> سند XML ترکیبی از عناصر XML می باشد. یک عنصر XML شامل یک تگ آغازی ، یک تگ پایانی و داده ای است که در بین این دو تگ قرار می گیرد.

<open>data</close> می توان بر اساس داده ای که یک عنصر XML در خود نگهداری می کند یک نام برای عنصر انتخاب کرد. به این نکته توجه کنید که عناصر به حروف بزرگ و کوچک حساسند، بنابراین دو کلمه person و Person با هم متفاوتند. XML فضاهای خالی را نادیده می گیرد، بنابراین به جای نوشتن یک فایل در یک خط می توانید آن را در چند خط بنویسید تا خوانایی آن بالاتر رود. بین عناصر XML ممکن است رابطه پدر- فرزندی وجود داشته باشد

<parent>
<child1>data</child1>
<child2>
<grandchild1>data</grandchild1>
</child2>
</parent>
سند XML بالا دارای اطلاعاتی برای سه شخص می باشد. هر سند XML باید دارای یک عنصر ریشه (root) باشد. در مثال اول این درس، عنصر Persons ، عنصر ریشه (پدر) و دیگر عناصر داخل آن در حکم فرزندان آن می باشند. جزییات هر شخص در داخل عنصر Person قرار دارند. عناصر فرزند عنصر Person عبارتند از Name، Age و Gender. صفات XML، روشی دیگر برای اضافه کردن داده به یک عنصر می باشند.

<Person name="John Smith">some data</Person> عنصر بالا یک خاصیت به نام name دارد که مقدار آن John Smith می باشد. مقادیر باید در داخل کوتیشن (‘ ‘) یا دابل کوتیشن (“ “) قرار بگیرند. در زیر روش اضافه کردن صفات نشان داده شده است.

<element att1="value1" att2="value2" ... attN="valueN">data</element> همانطور که مشاهده می کنید، می توان به یک عنصر چندین صفت اضافه کرد.

<Person name="John Smith" age="30" gender="Male">some data</Person> اجازه دهید که به عناصر مثال ابتدای درس صفاتی اضافه کنیم.

<Persons>
<Person name="John Smith">
<Age>30</Age>
<Gender>Male</Gender>
</Person>
<Person name="Mike Folly">
<Age>25</Age>
<Gender>Male</Gender>
</Person>
<Person name="Lisa Carter">
<Age>22</Age>
<Gender>Female</Gender>
</Person>
</Persons>
عنصر Name هر شخص (person) را حذف و صفت معادل آن (name) را برای هر عنصر می نویسیم. اسناد XML می توانند دارای یک تعریف XML باشند. تعریف XML شامل اطلاعاتی درباره سند XML مانند نسخه (همیشه نسخه 1.0 پیشنهاد می شود) و نوع رمزگذاری (encode) متن آن می باشد.

<?xml version="1.0" encoding="UTF-8" ?> این تعریف در بالاترین بخش سند و درست قبل از عنصر اصلی نوشته می شود. برای فایل XML می توان توضیحات نیز نوشت. نحوه نوشتن توضیحات در XML به صورت زیر است.

<!-- This is an XML comment --> می توان با استفاده از یک ویرایشگر متن ساده فایل های XML تولید کرد اما ویژوال استودیو دارای یک ویرایشگر XML قوی بوده که فایل را به صورت خودکار قالب بندی می کند و همچنین می توان از خاصیت IntelliSense برای سرعت بخشیدن به کارتان استفاده کنید. هنگام ایجاد یک پروژه جدید می توان بر روی دکمه Add New Item واقع در نوار ابزار کلیک کرده و از داخل پنجره ظاهر شده گزینه XML file را انتخاب کنید. ویژوال استودیو به صورت خودکار یک فایل xml همراه با تعریف آن ایجاد می کند.






XML Document Object Model

دات نت دارای کلاس هایی برای خواندن و دستکاری فایل های XML می باشد. این کلاسها در فضای نامی System.Xml قرار دارند. دات نت از XML Document Object Model استفاده می کند که شامل مجموعه ای از کلاس ها برای نمایش قسمت های مختلف یک سند XML می باشد. در زیر نام برخی از این کلاس ها ذکر شده است :



کلاس
توضیح



XmlNode
نشان دهنده یک گره در سند XML می باشد. هر چیزی که در داخل یک فایل XML می بینید مانند خواص عناصر، توضیحات و حتی فضاهای خالی یک گره می باشند. این کلاس، کلاس پایه دیگر کلاس های XML DOM می باشد.



XmlDocument
نشان دهنده یک سند واقعی XML می باشد که می تواند در بارگذاری یا ذخیره یک فایل XML مورد استفاده قرار گیرد.



XmlElement
یک عنصر XML را نمایش می دهد.



XmlAttribute
یک صفت XML را نمایش می دهد.



XmlText
متن داخل یک عنصر XML را نمایش می دهد.



XmlComment
یک توضیح XML را نمایش می دهد.


یک سند XML نماینده یک کلاس XmlDocument می باشد که می توانید آن را خوانده و دستکاری نمایید. سند XML باید با یک عنصر اصلی شروع شود. در داخل این عنصر اصلی فرزندهای آن قرار دارند. شما باید با مفهوم گره های پدر و فرزند عناصر آشنا شوید. یک گره پدر شامل گره های فرزند می باشد. به عنوان مثال به عنصر زیر که شامل چندین عنصر است توجه کنید :

<Product>
<ProductID>001</ProductID>
<ProductName>Shampoo</ProductName>
<Price>10</Price>
</Product> Product در مثال بالا گره پدر محسوب می شود. این گره شامل گره هایی مانند ProductID، ProductName و Price می باشد که فرزندان آن به حساب می آیند. اگر به عنوان مثال گره ProductName نیز دارای گره هایی در داخل خود باشد، خود ProductName یک گره پدر می شود، یعنی این گره دو نقش دارد : یکی فرزند گره Product و دیگری پدر گره هایی که در داخل آن قرار دارند. اجازه دهید به توضیح برخی از خواص و متدهای این کلاس ها بپردازیم.

XmlNode

XmlNode نشان دهنده همه قسمت های XML بوده و کلاس پایه دیگر کلاس های XML DOM می باشد. به عنوان مثال کلاس XmlElement از XmlNode مشتق شده و دارای خواص و متدهای آن می باشد. در زیر برخی از خواص کلاس پایه XmlNode آمده است :



خصوصیت
توضیح



Attributes
مجموعه ای از اشیاء XmlAttribute که نماینده صفات گره هستند.



ChildNodes
لیستی از گره هایی که فرزند گره مورد نظر ما هستند را بر می گرداند



FirstChild
اولین گره فرزند، گره جاری را بر می گرداند.



HasChildNodes
می گوید که آیا گره مورد نظر ما گره فرزند دارد یا نه؟



InnerText
متن همه گره های فرزند، گره مورد نظر را به صورت یک رشته ترکیب و نمایش می دهد.



InnerXml
رشته XML ی که بین دو تگ باز و بسته گره قرار دارد را بر می گرداند.



LastChild
آخرین گره فرزند، گره مورد نظر ما را بر می گرداند.



Name
نام گره را بر می گرداند.



NextSibling
گره ای که بعد از گره جاری آمده است را بر می گرداند.



NodeType
نوع گره جاری را نشان می دهد.



OuterXml
گره موجود و تگ ها و متن های داخل آن را بر می گرداند.



OwnerDocument
سند XML ی که گره به آن تعلق دارد را بر می گرداند.



ParentNode
گره والد یا پدر گره مورد نظر را بر می گرداند.



PreviousSibling
گره قبل از گره مورد نظر ما را برمی گرداند.



Value
مقدار گره مورد نظر ما را بر می گرداند.


خاصیت Attributes شمال لیستی از خواص یک گره یا عنصر می باشد. هر خاصیت به وسیله کلاس XmlAttribute نشان داده می شود. به مثال زیر توجه کنید.

<Person name="John Smith" age="30"></Person> خاصیت Attributes عنصر بالا شامل دو شیء XmlAttribute که در بردارنده اطلاعاتی برای خواص name و age می باشند، می باشد. خاصیت ChildNodes مجموعه ای از گره های فرزند، گره جاری می باشند. هر گره فرزند یک شیء XmlNode می باشد. می توانید با چک کردن مقدار خاصیت HasChildNodes بفهمید که آیا یک گره دارای گره فرزند می باشد یا نه. اگر گره دارای یک یا چند زیر گره (گره فرزند باشد ) مقدار true و اگر هیچ زیر گره ای نداشته باشد مقدار false برگشت داده می شود. برای به دست آوردن اولین و آخرین گره فرزند یک گره می توان به ترتیب از خواص FirstChild و LastChild و برای به دست آوردن گره قبل و بعد از یک گره می توان از خواص PreviousSibling و NextSibling استفاده نمود.

<PreviousNode></PreviousNode>
<CurrentNode></CurrentNode>
<NextNode></NextNode> ParentNode ، پدر یک گره را نشان می دهد. اگر گره هیچ پدری نداشته باشد این خاصیت مقدار تهی را بر می گرداند. خاصیت Name، نشان دهنده نام عنصر می باشد.

<Person>Example</Person> نام عنصر بالا Person است. InnerText متن داخل دو تگ باز و بسته یک کنترل را بر می گرداند. اگر با توضیحات سر و کار داشته باشید این خاصیت متن توضیحات را بر می گرداند.اگر یک عنصر دارای چندین گره در داخل خود باشد، خاصیت InnerText متن داخل همه گره های فرزند را گرفته، آنها را ترکیب و به صورت یک رشته ساده بر می گرداند. به کد XML زیر توجه کنید :

<Example>
<Sample1>Text1</Sample1>
<Sample2>Text2</Sample2>
<Sample3>
<Sample4>Text3</Sample4>
</Sample3>
</Example> خروجی خاصیت InnerText در مثال بالا، Text1Text2Text3 می باشد. به این نکته توجه کنید که سومین فرزند در مثال فوق (Sample3) خود دارای یک فرزند است که خاصیت InnerText متن داخل آن (Text3) را بر می گرداند.
InnerXml شبیه InnerText است با این تفاوت که تگ های XML موجود در متن را هم بر می گرداند.
OuterXml شبیه به InnerXml با این تفاوت که تگ های گره موجود و تگ ها و متن های داخل آن را بر می گرداند.
خاصیت OwnerDocument سند مرجع گره جاری را بر می گرداند. NodeType شامل مقداری از نوع شمارشی System.Xml.XmlNodeType است که به وسیله آن می توانید نوع یک گره را بگویید. در جدول زیر لیستی از مقادیر نوع شمارشی XmlNodeType آمده است:



مقدار
توضیح



Element
گره یک عنصر است.



Attribute
گره یک صفت است.



Text
گره یک متن است.



Comment
گره یک توضیح است.



Document
عنصر ریشه یک سند.



Whitespace
یک فضای سفید، مانند فضای خالی، خط جدید یا tab



XmlDeclaration
An XML Declaration element.


خاصیت Value مقدار یک گره را مشخص می کند و در هر گره متفاوت است. به عنوان مثال فراخوانی خاصیت Value یک توضیح، متن توضیح را بر می گرداند و خاصیت Value یک صفت مقدار صفت. به این نکته توجه کنید که برای دسترسی به محتوای یک XmlElement باید از InnerText یا InnerXml استفاده کنید نه خاصیت Value.
قبل از معرفی متدهای کلاس XmlNode ابتدا بهتر است با Xpath آشنا شوید. XPath زبانی برای یافتن اطلاعات در یک سند XML است . با استفاده از XPath می توان محل و موقعیت ساختار سند و یا داده های موجود در یک سند XML را مشخص نمود. هدف اولیه XPath ،امکان آدرس دهی بخش های متفاوت یک سند XML است . بمنظور تامین خواسته فوق از امکانات و پتانسیل های متعددی بمنظور انجام عملیات بر روی رشته ها ، اعداد و منطق استفاده می شود . XPath از یک گرامر فشرده و عدم مبتنی بر XML بهمراه URI و مقادیر خصلت های XML استفاده می نماید.دلیل انتخاب نام XPath برای تکنولوژی فوق بدین علت است که در حقیقت از یک آدرس بمنظور حرکت در طول یک سند XML با ساختار سلسله مراتبی استفاده می گردد. XPath یک سند XML را بعنوان درختی از گره ها شبیه سازی می نماید . در این راستا ، گره های متفاوتی نظیر: گره های Element ، گره های Attribute و گره های Text ، وجود دارد برای هر گره توسط XPath ، یک رشته در نظر گرفته می شود . برخی از انواع خاص گره ها دارای اسامی اختصاصی خود می باشند . XPath بطور کامل XML Namespace را حمایت می نماید در جدول زیر متدهای مفید کلاس XmlNode آمده است :



متد
توضیح



AppendChild()
یک کره فرزند به گره اضافه می کند.



InsertAfter()
بعد از گره جاری یک گره ایجاد می کند.



InsertBefore()
قبل از گره جاری یک گره ایجاد می کند.



PrependChild()
یک گره را به ابتدای گره های فرزند گره مورد نظر ما اضافه می کند.



RemoveAll()
گره های فرزند و خواص گره مورد نظر را حذف می کند.



RemoveChild()
یک گره فرزند خاص مشخص را حذف می کند.



ReplaceChild()
یک گره فرزند جدید را جایگزین یک گره فرزند قدیمی تر می کند.



SelectNodes()
لیستی از گره هایی که با عبارت Xpath مطابقت دارند را انتخاب می کند.



SelectSingleNode()
اولین گره ای که با عبارت Xpath مطابقت دارد انتخاب می کند.


کاربرد این متدها را در درس های آینده توضیح می دهیم.

XmlDocument

از کلاس XmlDocument برای نمایش سند XML و محتویات آن استفاده می شود. در زیر برخی از خواص این کلاس ذکر شده است :



خاصیت
توضیح



DocumentElement
عنصر ریشه سند را نشان می دهد.



PreserveWhitespace
می گوید که آیا فضاهای خالی سند XML حذف یا نگهداری شوند.


در زیر برخی از متدهای کلاس XmlDocument آمده است:



متد
توضیح



CreateAttribute()
یک شئ XmlAttribute ایجاد می کند.



CreateComment()
یک شئ XmlComment ایجاد می کند.



CreateElement()
یک شئ XmlElement ایجاد می کند.



CreateTextNode()
یک شئ XmlText با متن مشخص ایجاد می کند.



CreateXmlDeclaration()
یک XmlDeclaration با مقدار مشخص ایجاد می کند.



GetElementById()
یک عنصر XML با ID مشخص را بر می گرداند.



GetElementsByTagName()
مجموعه ای از عناصری که با نام مشخصی مطابقت دارند را برگشت می دهد.



Load()
یک سند XML را از یک فایل بارگذاری می کند.



Save()
محتوای سند XML را در فایل مشخصی ذخیره می کند.


به متدهایی که با کلمه Create شروع شده اند توجه کنید. از این متدها در ساخت اشیاء XML DOM استفاده می شود. به عنوان مثال ، اگر می خواهید یک عنصر(element) برای سند جاری ایجاد کنید، می توانید از متد CreateElement استفاده نمایید. بیشتر متدهای بالا را در درس های بعدی توضیح می دهیم.

XmlElement

از کلاس XmlElement برای نمایش یک عنصر ساده XML استفاده می شود. در جدول زیر خواص پر کاربرد این کلاس ذکر شده است :




خاصیت
توضیح



Attributes
همه صفات یک عنصر را شامل می شود.



HasAttributes
می گوید که آیا عنصر شامل صفت است یا خیر؟



Value
متن بین تگ های باز و بسته عنصر مورد نظر را بر می گرداند. اگر عنصر مورد نظر ما دارای عنصر فرزندی باشد مقدار این خصوصیت خالی خواهد شد.



در جدول زیر برخی از متدهای XmlElement آمده است:




متد
توضیح



GetAttribute()
مقدار یک صفت با نام مشخص را بر می گرداند.



GetAttributeNode()
صفتی از یک گره با نام مشخص را بر می گرداند.



GetElementsByTagName()
تمام عناصری که نام آنها برابر ان چیزی است که در پرانتز امده از سند xml
انتخاب می شوند.


کلاس های XmlText و XmlComment به ترتیب متن داخل یک عنصر و توضیحات مربوط به آن را نمایش می دهند. استفاده از آنها بسیار آسان است و در درس های بعدی در مورد آنها توضیح نمی دهیم.





نوشتن در یک فایل XML

با استفاده از متدها و کلاس های XML Document Object Model می توان به راحتی یک سند XML ایجاد و آن را در یک فایل ذخیره کرد. در این درس می خواهیم نحوه نوشتن در یک فایل XML را با استفاده از یک برنامه به شما آموزش دهیم. این برنامه به کاربر اجازه ثبت سن، جنس و نامش و ذخیره آنها در یک فایل XML را می دهد.
یک برنامه ویندوزی جدید به شکل زیر ایجاد کنید :
http://www.w3-farsi.com/wp-content/uploads/2014/03/writing-xml-1001.jpg (http://www.w3-farsi.com/wp-content/uploads/2014/03/writing-xml-1001.jpg)
نام کنترل های textBox را به textBoxName، textBoxAge و textBoxGender و نام دکمه را به buttonAdd تغییر دهید. حال نوبت به بخش کدنویسی می رسد. با زدن دکمه F7 به محیط کدنویسی رفته و فضای نام System.Xml را به قسمت فضاهای نامی اضافه کنید.


using System.Xml;

حال یک فیلد XmlDocument و یک رشته برای نمایش مسیر فایل XML اضافه می کنیم.


private XmlDocument doc;
private const string PATH = @"C:sample.xml";

به محیط طراحی بر می گردیم و بر روی دکمه دوبار کلیک می کنیم تا کنترل کننده رویداد مربوط به رویداد کلیک ایجاد شود :


private void buttonAdd_Click(object sender, EventArgs e)
{
// ایجاد می کنیم XMLیک سند
doc = new XmlDocument();

// اگر فایل XML در مسیر مشخص شده وجود نداشت آن را ایجاد می کنیم
if (!System.IO.File.Exists(PATH))
{
//گره های لازم را ایجاد می کنیم
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
XmlComment comment = doc.CreateComment("This is an XML Generated File");
XmlElement root = doc.CreateElement("Persons");
XmlElement person = doc.CreateElement("Person");
XmlAttribute name = doc.CreateAttribute("name");
XmlElement age = doc.CreateElement("Age");
XmlElement gender = doc.CreateElement("Gender");

//مقادیر را به گره ها اضافه می کنیم
name.Value = textBoxName.Text;
age.InnerText = textBoxAge.Text;
gender.InnerText = textBoxGender.Text;

//سند را ایجاد می کنیم
doc.AppendChild(declaration);
doc.AppendChild(comment);
doc.AppendChild(root);
root.AppendChild(person);
person.Attributes.Append(name);
person.AppendChild(age);
person.AppendChild(gender);

doc.Save(PATH);
}
else //اگر فایل XML از قبل موجود بود
{
//را بارگذاری می کنیم XMLفایل
doc.Load(PATH);

//عنصر ریشه را بدست می آوریم
XmlElement root = doc.DocumentElement;

XmlElement person = doc.CreateElement("Person");
XmlAttribute name = doc.CreateAttribute("name");
XmlElement age = doc.CreateElement("Age");
XmlElement gender = doc.CreateElement("Gender");

//مقادیر را به گره ها اضافه می کنیم
name.Value = textBoxName.Text;
age.InnerText = textBoxAge.Text;
gender.InnerText = textBoxGender.Text;

//را ایجاد می کنیم Personعنصر
person.Attributes.Append(name);
person.AppendChild(age);
person.AppendChild(gender);

// را به آخر عنصر ریشه اضافه می کنیم Personعنصر
root.AppendChild(person);

//Save the document
doc.Save(PATH);
}

//نمایش پیغام موفقیت آمیز
MessageBox.Show("Details have been added to the XML File.");

//پاک کردن فیلدها برای ورود اطلاعات جدید توسط کاربر
textBoxName.Text = String.Empty;
textBoxAge.Text = String.Empty;
textBoxGender.Text = String.Empty;
} وقتی که دکمه add کلیک شود، یک XmlDocument (سند XML) ایجاد می شود و مسیر آن هم همان مسیری است که خودمان به صورت یک ثابت تعریف کرده ایم (PATH = @”C:sample.xml”;). حال با استفاده از متد Exists تست می کنیم که آیا فایل ایجاد شده است یا نه؟ اگر وجود نداشت فایل جدید را ایجاد و اولین رکورد را اضافه می کنیم و اگر وجود داشت، رکورد جدید را به آخر آن اضافه می کنیم.
اجازه دهید در مورد کدها وقتی که فایل برای اولین بار ایجاد می شود بحث کنیم :

//Create neccessary nodes
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
XmlComment comment = doc.CreateComment("This is an XML Generated File");
XmlElement root = doc.CreateElement("Persons");
XmlElement person = doc.CreateElement("Person");
XmlAttribute name = doc.CreateAttribute("name");
XmlElement age = doc.CreateElement("Age");
XmlElement gender = doc.CreateElement("Gender");
کد بالا گره های لازم برای ایجاد سند XML را ایجاد می کند.ابتدا یک تعریف برای سند با استفاده از کلاس XmlDeclaration و متد CreateXmlDeclaration از کلاس XmlDocument ایجاد می کنیم. همانطور که در خط سوم مثال بالا می بینید، این متد سه پارامتر قبول می کند. سپس یک توضیح را با استفاده از کلاس XmlComment و متد CreateComment و آن را برای استفاده متد ارسال می کنیم. من این توضیح را برای نشان دادن چگونگی ایجاد و استفاده از توضیحات اضافه کرده ام. سپس با استفاده از متد CreateElement و کلاس XmlElement عنصر ریشه را ایجاد می کنیم.
از کلاس CreateElement برای ایجاد عنصر ریشه، پدر و عناصر فرزند استفاده می شود.این متد یک آرگومان از نوع رشته قبول می کند که همان نام عنصر است. سپس یک شخص جدید را نگهداری اطلاعات وارد شده توسط کاربرایجاد می کنیم.
عنصر Person یک صفت به نام name و دو فرزند سن (Age) و جنسیت (Gender) دارد.
متد CreateAttribute یک آرگومان از نوع رشته قبول می کند که همان نام صفت است. جزییات صفت در یک شئ XmlAttribute ذخیره می شود.
از آنجاییکه Person، Age و Gender عنصر هستند در نتیجه ما از متد CreateElement و کلاس XmlElement برای آنها استفاده کرده ایم.

name.Value = textBoxName.Text;
age.InnerText = textBoxAge.Text;
gender.InnerText = textBoxGender.Text; حال نوبت به اضافه کردن مقادیر به گره هاست. این مقادیر توسط کاربر و از طریق کنترل های textBox اضافه می شوند.
شئ XmlAttribute از خاصیت Value برای دسترسی و مقداردهی گره ها و XmlElement از InnerText یا InnerXml برای اضافه کردن مقادیر به داخل گره ها استفاده می کند.

doc.AppendChild(declaration);
doc.AppendChild(comment);
doc.AppendChild(root);
root.AppendChild(person);
person.Attributes.Append(name);
person.AppendChild(age);
person.AppendChild(gender);

می خواهیم قسمت های مختلف را برای ایجاد یک سند کامل XML کنار هم قرار دهیم.
ابتدا قسمت تعاریف سند را با استفاده از متد AppendChild که یک XmlNode قبول می کند به عنوان آخرین فرزند به سند اضافه می کنیم. سپس توضیحات را درست در پایین قسمت تعاریف اضافه می کنیم. عنصر ریشه را نیز در پایین قسمت توضیحات قرار می دهیم. به این نکته توجه کنید که ترتیب اضافه کردن گره ها مهم است.
بعد از ایجاد عنصر ریشه گره های لازم را به داخل آن اضافه کنیم.
یک عنصر person به عنصر ریشه و سپس با استفاده از متد Append یک صفت name به خاصیت Attributes آن اضافه می کنیم. و در نهایت عناصر age و gender را به عنصر person اضافه می کنیم. به این نکته توجه کنید که ترتیب ایجاد عناصر مهم نیست.
به عنوان مثال می توان ابتدا عنصر person را ایجاد و کامل و بعد آن را به عنصر ریشه اضافه کنید. اما بهتر است که ایجاد قسمت تعریف، توضیحات و عنصر ریشه به ترتیب باشد.

doc.Save(PATH);

این متد سند XML ایجاد شده را در مسیر مشخص شده ذخیره می کند.
اجازه دهید به قسمت else کد بالا نگاهی بیندازیم. این قسمت زمانی اجرا می شود که فایل XML از قبل وجود داشته باشد.
این قسمت فایل XML را بارگذاری کرده و به ما اجازه می دهد که شخص جدیدی را به لیست اشخاص موجود در عنصر ریشه اضافه کنیم.


//Load the XML File
doc.Load(PATH);

//Get the root element
XmlElement root = doc.DocumentElement;

وقتی که فایل XML با استفاده از متد Load بارگذاری شد، عنصر ریشه با استفاده از خاصیت DocumentElement برگردانده می شود. حال که به عنصر ریشه دسترسی داریم می توانیم عناصر بیشتری به آن اضافه کنیم.
یک شخص جدید را با استفاده از مواردی که توسط کاربر وارد می شود ایجاد و آن را به آخر لیست عناصر فرزند اضافه می کنیم.
سپس فایل XML را بوسیله متد Save بروزرسانی می کنیم. خطوط آخر برای نمایش یک پیغام موفقیت و پاک کردن فیلدهای متنی برای ورود اطلاعات جدید به کار می روند.
برنامه را اجرا و حداقل دو فیلد (مثلا سن و نام) را وارد کنید. فایل XML در مسیری که در متغیر PATH تعیین شده است ایجاد می شود. شما می توانید مسیر ذخیره فایل را تغییر دهید.
فایل XML را باز کرده و محتویات آن را مشاهده کنید.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--This is an XML Generated File-->
<Persons>
<Person name="John Smith">
<Age>30</Age>
<Gender>Male</Gender>
</Person>
<Person name="Lisa Carter">
<Age>22</Age>
<Gender>Female</Gender>
</Person>
</Persons> اکنون یک فایل XML را با استفاده از متدها و کلاس های XML DOM با موفقیت تولید کرده اید. شما می توانید با متدهای بیشتری کار و عملکرد آنها را تجربه کنید.



لینک مرجع : w3-farsi.com (http://www.w3-farsi.com)