DOM XML
مدل شیء سند (DOM) — نمایش درختی XML و پیمایش گرهها
DOM چیست؟
DOM مخفف Document Object Model (مدل شیء سند) است؛ یک رابط برنامهنویسی (API) استاندارد W3C برای دسترسی و تغییر اسناد. DOM سند را بهصورت یک درخت از گرهها (Nodes) در حافظه نمایندگی میکند.
DOM برای HTML و XML مشترک است — همان API که در جاوااسکریپت با
document.getElementById استفاده میکنید، برای XML هم کار میکند!همه چیز در DOM گره است
طبق DOM، هر بخشی از سند XML یک گره (Node) است:
<bookstore> <!-- گره عنصر (Element) -->
<book category="web"> <!-- گره عنصر + گره ویژگی -->
<title>XML Guide</title> <!-- گره عنصر + گره متن -->
</book>
</bookstore>
| نوع گره | توضیح |
|---|---|
| Document | خود سند (ریشه درخت DOM) |
| Element | عناصر XML |
| Text | متن داخل عناصر |
| Attribute | ویژگیهای عناصر |
| Comment | کامنتها |
پیمایش درخت DOM
هر گره DOM این خصوصیات را دارد:
| خصوصیت | معنی |
|---|---|
parentNode | گره والد |
childNodes | لیست گرههای فرزند |
firstChild | اولین فرزند |
lastChild | آخرین فرزند |
nextSibling | گره هموالد بعدی |
previousSibling | گره هموالد قبلی |
nodeName | نام گره |
nodeValue | مقدار گره |
nodeType | نوع گره (عدد) |
DOM در جاوااسکریپت
// پارس رشته XML
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
// دسترسی به عناصر
const books = xmlDoc.getElementsByTagName("book");
const firstTitle = books[0].getElementsByTagName("title")[0];
console.log(firstTitle.textContent); // متن عنوان
console.log(books[0].getAttribute("category")); // ویژگی
DOM در PHP
$doc = new DOMDocument();
$doc->load("books.xml");
$books = $doc->getElementsByTagName("book");
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue;
echo $book->getAttribute("category");
}
تغییر سند با DOM
DOM فقط خواندنی نیست — میتوانید گره اضافه، حذف و تغییر دهید:
// جاوااسکریپت: افزودن عنصر جدید
const newBook = xmlDoc.createElement("book");
newBook.setAttribute("category", "new");
xmlDoc.documentElement.appendChild(newBook);
// PHP: حذف عنصر
$node = $doc->getElementsByTagName("book")->item(0);
$node->parentNode->removeChild($node);
DOM در برابر SimpleXML
| ویژگی | DOM | SimpleXML (PHP) |
|---|---|---|
| سرعت یادگیری | سختتر | آسان |
| قدرت | کامل (CRUD + همه گرهها) | محدودتر |
| حجم حافظه | بیشتر | کمتر |
| مناسب برای | ویرایش پیچیده | خواندن ساده |
قاعده سرانگشتی در PHP: برای خواندن ساده از SimpleXML و برای ویرایش و ساخت پیچیده از DOMDocument استفاده کنید. هر دو روی موتور یکسانی (libxml) کار میکنند و قابل تبدیل به هم هستند!
این مبحث بخشی از دوره آموزش کامل XML است.