پیمایش (DOM Traversing)
پیمایش (Traversing) یعنی حرکت در درخت DOM. «درخت DOM» ساختار گره هاست. با پیمایش، نام و مقدار گره ها را می خوانیم. مثل قدم زدن بین نیمکت های کلاس و خواندن اسم ها.
پیمایش گره ها در عمل
در این مثال، یک رشته XML را می خوانیم. سپس بچه های ریشه را می گردیم. بعد، نام هر گره و متنش را می نویسیم.
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var text;
var parser;
var xmlDoc;
var x;
var i;
var txt;
txt = "";
text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length; i++) {
txt = txt + x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
<\/script>
</body>
</html>
تفاوت مرورگرها و فاصله های خالی
مرورگرها در فاصله خالی و خط جدید فرق دارند. برخی فاصله خالی را «گره متن» حساب می کنند. بنابراین تعداد بچه ها تغییر می کند.
شمارش تعداد بچه های ریشه
<!DOCTYPE html>
<html>
<body>
<p id="count"></p>
<script>
function showCount(xml) {
var xmlDoc;
var x;
xmlDoc = xml.responseXML;
x = xmlDoc.documentElement.childNodes;
document.getElementById("count").innerHTML = "Number of child nodes: " + x.length;
}
<\/script>
</body>
</html>
PCDATA و CDATA با مثال کوتاه
PCDATA یعنی «متن قابل تحلیل». مفسر XML این متن را می شکند. CDATA یعنی «متن غیرقابل تحلیل». مفسر داخلش را نادیده می گیرد.
قرار دادن کد در CDATA
<script>
<![CDATA[
function matchwo(a, b) {
if (a < b && a < 0) {
return 1;
} else {
return 0;
}
}
]]>
<\/script>
نکته: رشته "]]>" داخل CDATA مجاز نیست. همچنین CDATA تو در تو مجاز نیست.
گام های پیشنهادی برای پیمایش DOM
- XML را در xmlDoc بارگذاری کن.
- به ریشه برو و childNodes را بگیر.
- نوع هر گره را بررسی کن و متن را بخوان.
برای جزئیات بیشتر به «فهرست گره ها» و «اطلاعات گره» هم سر بزن. سپس بخش «ناوبری گره ها» را ادامه بده تا روابط گره ها را ببینی.
جمع بندی سریع
- پیمایش، حرکت در گره های DOM است.
- فاصله خالی می تواند گره متن باشد.
- PCDATA تحلیل می شود؛ CDATA تحلیل نمی شود.
- با حلقه، نام و مقدار را استخراج کن.