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 | برای تعریف فایل XML به کار می رود. |
خاصیت 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 به ترتیب متن داخل یک عنصر و توضیحات مربوط به آن را نمایش میدهند. استفاده از آنها بسیار آسان است و در درسهای بعدی در مورد آنها توضیح نمیدهیم.