XML DOM خیلی مهم است

چرا؟

چون اگر با این مقوله اشنا نباشید نمی توانید کارهای زیر را با  node های موجود در سند xml  انجام دهید :
بدست اوردن مقدار هر node متنی
 ویرایش مقدار هر node متنی
حذف یا اضافه کردن node دلخواهتان از سند Xml
 
حالا اینکه node چیست ؟ تا اخر این صفحه را بخوانید به خوبی متوجه خواهید شد
 برای ایادگیری xml dom باید با موارد زیر آشنا باشید :
 
 
  • HTML
  • XML
  • JavaScript
 
 DOM چیست ؟
 استاندارد w3c است
 dom روشی برای دسترسی و مدیریت کردن تگ ها ، صفات و محتوای انها در سندهایی چون html , xml است
 به کمک dom می توان ساختار و سبک های سی اس اس و محتوا و مقدار صفات تگ ها را به کمک برنامه نویسی جاوا اسکریپت تغییر داد
 سه نوع dom وجود دارد :
 core dom : استانداردی برای  هر نوع سند
 xml dom : استانداردی برای   سندهای xml
 html dom : استانداردی برای سند های html
 
 dom دارای صفات و متدهایی است که به کمک انها می توان تگ ها ، مقدار تگ ها ، ویژگیهای سی اس اس تگ ها و مقدار صفات انها را تغییر داد یا به انها دسترسی داشت
 
 مدل  XML  DOM چیست ؟
 یک مدل استاندارد برای xml است
 یک واسط برنامه نویسی استاندارد برای xml است
 زبان مستقل از سیستم است
 استاندارد w3c است
 
در  مدل xml dom  می توان با استفاده از متدهای متنوعی که وجود دارد ، تمام  اشیا و ویژگیهایی  تگ های xml را مدیریت کرد 
 
 به عبارت دیگر :
 مدل dom روشی است برای بدست اوردن ، تغییر دادن ، اضافه کردن و حذف کردن عناصر سند xml
node ها در dom
 در مدل xml dom هر چیزی که در یک برنامه xml وجود دارد یک node نامیده می شود
 ( مثل : خود تگ ها ، صفات تگها ، مقدار هر تگ )
 DOM می گوید :
 خود سند(برنامه )  XML یک NODE از نوع سند است
 هر تگ درون برنامه XML یک NODE از نوع ELEMENT است
 هر متنی که درون ELEMENT ها ( تگ ها ) نوشته شده یک NODE از نوع TEXT است
 هر صفت که در تگ ها تعریف شده ، یک NODE از نوع ATTRIBUTE است
 توضیحات درون برنامه ، یک NODE از نوع COMMENT است
 
 
 مثال ) برنامه BOOKS.XML را در نظر بگیرید
 در این برنامه ، اطلاعات مربوط به کتابها بصورت دسته بندی شده شامل تگ های تو در توی زیر است و اطلاعات کتابهای مختلف در ان ذخیره شده است  :
نام BOOKSTORE ، نام تگ والد تمامتگ های برنامه است که معنی ان می شود کتاب فروشی
در هر کتاب فروشی ، کتابهای مختلف وحود دارد
 تگ BOOK که صفت CATEGORY ان نوع کتاب را مشخص می کند
 از انجا که هر کتاب دارای مشخصاتی مثل عنوان ، نویسنده ، سال چاپ و قیمت است
 پس برای هر مورد یک تگ تعریف می کنیم و ان را درون تگ BOOK قرار می دهیم
 و درون هر تگ اطلاعات متنی ان را می نویسیم
 برنامه کامل شده را در قسمت پائین مشاهده می کنید
 

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="web">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="web" cover="paperback">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

 
 در مثال بالا :
  •  NODE ریشه : همان تگ BOOKSTORE است و تمام NODE های  دیگر درون ان قرار گرفته اند
  • NODE با نام BOOKSTORE در بر گیرنده چهار NODE به نامBOOK است
  •  اولین BOOK NODE در بر گیرنده چهار NODE دیگر است

<title>, <author>, <year>, and <price>

 که هر کدامشان در بر گیرنده یک TEXT NODE هستند یعنی :

"Everyday Italian", "Giada De Laurentiis", "2005", "30.00"

 
 هر متنی درون TEXT NODE ذخیره می شود
عمومی ترین اشتباه  در پردازش های DOM  این است که انتظار داریم  هر NODE از نوع ELEMENT در بر دارنده یک NODE از نوع TEXT باشد
 به هر حال ، متن هر NODE از نوع ELEMENT در یک NODE متنی ذخیره می شود 

 در این مثال :

<year>2005</year>

NODE از نوع ELEMENT به نام YEAR 

یک NODE از نوع متنی با مقدار 2005 را در خود نگه می دارد

دقت کنید که 2005 مقدار یا VALUE برای NODE به نام YEAR نیست !

درخت node ها در مدل xml dom
xml dom نوودهای درون یک سند xml را بصورت یک درخت می بیند
 تمام node ها در این درخت با هم ارتباط دارند
 بنابراین می توان به هر node ای از این درخت که می خواهیم براحتی دست یابیم
 محتوای هر node می تواند ویرایش شده یا حذف شود
 و همچنین می توان node های جدیدی از نوع element ( تگ ) در این درخت ایجاد کرد
 درخت node مجموعه ای از node ها و ارتباطات بین انها را نشان می دهد
 ریشه درخت که در اصل درخت از ان شروع می شود همان node ریشه است
 و انقدر درخت منشعب می شود و شاخه می دهد تا در نهایت به node های متنی می رسد
 
 یعنی اگر ما این درخت node را از بالا ( ریشه ) به پائین رسم کنیم : node ریشه می شود اولین موجودیت در درخت و node های متنی می شوند اخرین شاخه ی این درخت
درخت زیر از روی node های موجود در سند xml به نام  book.xml ایجاد شده است
 
 
 آشنایی با node های والد (parent) ، بچه ها (children) و خواهربرادر (sibling)
 node های درخت node دارای یک رابطه خویشاوندی با هم هستند
 واژه های parent , child  و sibling برای بیان این رابطه بکار می روند
 node های والد دارای بچه هستند و بچه هایی که والد مشترک دارند اصطلاحا sibling یا خواهر برادر گفته می شوند
  •  در درخت node ، بالاترین node  ، ریشه نام دارد
  •  به جز node ریشه ، تمام node های دیگر این درخت دارای والد هستند
  •  هر node ای می تواند دارای چندین فرزند باشد
  •  یک leaf یا برگ ، node ای است که هیچ فرزندی ندارد
  •  node های از نوع sibling  دارای parent مشترک هستند
 

 اگر فایل book.xml را  مشاهده  کرده باشید ، می دانید که در ون تگ bookstore ، چهار تگ به نام book قرار دارند

که این چهار تگ می شوند چهار فرزند bookstore و این چهار تگ باهم خواهر برادر می شوند

 درخت زیر این رابطه را نشان می دهد :
 
 از انجائیکه اطلاعات سند xml بصورت درخت پیاده سازی می شوند ،
 
 
 فرزند (child) اول - فرزند (child) آخر
 از فایل book.xml ، قطعه کدی در ادامه نشان داده شده است :

 

<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
</bookstore>

 

 گفتیم که به node های تگ می گوئیم element

 در قطعه بالا :

element با نام titile اولین فرزند element با نام book است

 element با نام price آخرین فرزند element با نام book است

 و همچنین :

node با نام book  ، والد یا همان parent برای element های زیر است :

 

 <title>, <author>, <year>, <price>