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

ویژگیDOMSimpleXML (PHP)
سرعت یادگیریسخت‌ترآسان
قدرتکامل (CRUD + همه گره‌ها)محدودتر
حجم حافظهبیشترکمتر
مناسب برایویرایش پیچیدهخواندن ساده
قاعده سرانگشتی در PHP: برای خواندن ساده از SimpleXML و برای ویرایش و ساخت پیچیده از DOMDocument استفاده کنید. هر دو روی موتور یکسانی (libxml) کار می‌کنند و قابل تبدیل به هم هستند!

این مبحث بخشی از دوره آموزش کامل XML است.

ابزارهای مرتبط