DOM tugunlarini aylanib chiqish
Aylanib chiqish (traversing) — tugunlar daraxtini sikl bilan aylanib chiqish yoki u bo‘ylab harakatlanish demakdir.
Tugunlar daraxtini aylanib chiqish
Ko‘pincha XML hujjatni sikl bilan aylanib chiqishga to‘g‘ri keladi, masalan, har bir elementning qiymatini ajratib olmoqchi bo‘lganingizda.
Bu "tugunlar daraxtini aylanib chiqish" (traversing the node tree) deb ataladi
Quyidagi misol <book> elementining barcha bola tugunlarini aylanib chiqadi va ularning nomlari hamda qiymatlarini ko‘rsatadi:
Misol
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
Natija:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
O‘zingiz sinab ko‘ring »
Misol tushuntirilishi:
- XML stringni xmlDoc’ga yuklang
- Ildiz elementning bola tugunlarini oling
- Har bir bola tugun uchun tugun nomini va matn tugunining qiymatini chiqaring
DOM tahlilida (parsing) brauzerlar o‘rtasidagi farqlar
Barcha zamonaviy brauzerlar W3C DOM spetsifikatsiyasini qo‘llab-quvvatlaydi.
Biroq brauzerlar o‘rtasida ba’zi farqlar mavjud. Muhim farqlardan biri:
- Bo‘sh joylar va yangi qatorlarni qanday qayta ishlashi
DOM - bo‘sh joylar va yangi qatorlar
XML ko‘pincha tugunlar orasida yangi qator yoki bo‘sh joy belgilarini o‘z ichiga oladi. Bu, ayniqsa, hujjat Notepad kabi oddiy muharrirda tahrirlanganda ko‘p uchraydi.
Quyidagi misol (Notepad’da tahrirlangan) har bir qator orasida CR/LF (yangi qator) va har bir bola tugun oldida ikkita bo‘sh joyni o‘z ichiga oladi:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>Internet Explorer 9 va undan oldingi versiyalar bo‘sh joylar yoki yangi qatorlarni matn tugunlari sifatida QABUL QILMAYDI, boshqa brauzerlar esa qabul qiladi.
Quyidagi misol (books.xml faylidagi) ildiz elementning bola tugunlari sonini chiqaradi. IE9 va undan oldingi versiyalar 4 ta bola tugunni, IE10 va undan keyingi versiyalar hamda boshqa brauzerlar esa 9 ta bola tugunni chiqaradi:
Misol
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x = xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number of child nodes: " + x.length;
}
O‘zingiz sinab ko‘ring »
PCDATA - Parsed Character Data (tahlil qilinadigan belgilar ma’lumotlari)
XML parserlar odatda XML hujjatdagi barcha matnni tahlil qiladi (parse).
XML elementi tahlil qilinganda XML teglari orasidagi matn ham tahlil qilinadi:
<message>This text is also parsed</message>Parser buni XML elementlari boshqa elementlarni o‘z ichiga olishi mumkinligi sababli qiladi, masalan, ushbu misolda <name> elementi ikkita boshqa elementni (first va last) o‘z ichiga oladi:
<name><first>Bill</first><last>Gates</last></name>va parser uni quyidagicha ichki elementlarga ajratadi:
<name>
<first>Bill</first>
<last>Gates</last>
</name>Parsed Character Data (PCDATA) — XML parser tomonidan tahlil qilinadigan matnli ma’lumotlarga nisbatan ishlatiladigan atama.
CDATA - (tahlil qilinmaydigan) belgilar ma’lumotlari
CDATA atamasi XML parser tomonidan tahlil qilinmasligi kerak bo‘lgan matnli ma’lumotlarga nisbatan ishlatiladi.
"<" va "&" kabi belgilar XML elementlarida taqiqlangan.
"<" xatoga olib keladi, chunki parser uni yangi elementning boshlanishi deb talqin qiladi.
"&" xatoga olib keladi, chunki parser uni belgi entity’sining boshlanishi deb talqin qiladi.
Ba’zi matnlar, masalan JavaScript kodi, ko‘plab "<" yoki "&" belgilarini o‘z ichiga oladi. Xatolarning oldini olish uchun skript kodini CDATA sifatida belgilash mumkin.
CDATA bo‘limi ichidagi hamma narsa parser tomonidan e’tiborsiz qoldiriladi.
CDATA bo‘limi "<![CDATA[" bilan boshlanadi va "]]>" bilan tugaydi:
<script>
<![CDATA[
function matchwo(a,b) {
if (a < b && a < 0) {
return 1;
} else {
return 0;
}
}
]]>
</script>Yuqoridagi misolda CDATA bo‘limi ichidagi hamma narsa parser tomonidan e’tiborsiz qoldiriladi.
CDATA bo‘limlari haqida eslatmalar:
CDATA bo‘limi "]]>" stringini o‘z ichiga ola olmaydi. Ichma-ich joylashgan CDATA bo‘limlariga ruxsat berilmaydi.
CDATA bo‘limining oxirini bildiruvchi "]]>" ichida bo‘sh joy yoki qator uzilishi bo‘lishi mumkin emas.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
