XML DOM Traverse Node Tree
Traversing ဆိုသည်မှာ node tree ကိုဖြတ်၍ လှည့်ပတ်ခြင်း သို့မဟုတ် ခရီးသွားခြင်း ကို ဆိုလိုသည်။
Node Tree ကိုဖြတ်လျှောက်ခြင်း။
ဥပမာ- ဒြပ်စင်တစ်ခုစီ၏တန်ဖိုးကို ထုတ်ယူလိုသောအခါတွင် သင်သည် XML စာရွက်စာတမ်းကို မကြာခဏ ကွင်းဆက်လိုသည်။
၎င်းကို "Node tree ကိုဖြတ်ကူးခြင်း" ဟုခေါ်သည်။
အောက်ဖော်ပြပါ ဥပမာသည် <book> ၏ ကလေး node အားလုံးကို လှည့်ပတ်ပြီး ၎င်းတို့၏ အမည်များနှင့် တန်ဖိုးများကို ပြသသည်-
ဥပမာ
<!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>
အထွက်-
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
ဥပမာ ရှင်းပြထားသည်-
- XML စာကြောင်းကို xmlDoc တွင် တင်ပါ။
- အမြစ်ဒြပ်စင်၏ ကလေးဆုံမှတ်များကို ရယူပါ။
- ကလေး node တစ်ခုစီအတွက်၊ node အမည်နှင့် စာသား node ၏ node တန်ဖိုးကို ထုတ်ပေးပါ။
DOM ခွဲခြမ်းစိတ်ဖြာခြင်းရှိ ဘရောက်ဆာ ကွာခြားချက်များ
ခေတ်မီဘရောက်ဆာများအားလုံး W3C DOM သတ်မှတ်ချက်ကို ပံ့ပိုးပေးသည်။
သို့သော်လည်း ဘရောက်ဆာများကြားတွင် ကွဲပြားမှုအချို့ရှိသည်။ အရေးကြီးသော ခြားနားချက်တစ်ခုမှာ-
- အဖြူကွက်များနှင့် လိုင်းအသစ်များကို ကိုင်တွယ်ပုံ
DOM - White Spaces နှင့် New Lines
XML သည် node များကြားတွင် စာကြောင်းအသစ် သို့မဟုတ် နေရာလွတ်အက္ခရာများပါရှိသည်။ Notepad ကဲ့သို့ ရိုးရှင်းသော တည်းဖြတ်သူမှ စာရွက်စာတမ်းအား တည်းဖြတ်သောအခါတွင် ထိုသို့ဖြစ်လေ့ရှိသည်။
အောက်ပါဥပမာတွင် (Notepad မှတည်းဖြတ်သည်) တွင် စာကြောင်းတစ်ခုစီနှင့် ကလေး node တစ်ခုစီ၏ရှေ့တွင် နေရာနှစ်ခုကြားရှိ CR/LF (စာကြောင်းအသစ်) ပါရှိသည်။
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 နှင့် အစောပိုင်းတွင် အခြားဘရောက်ဆာများက လုပ်ဆောင်နေချိန်တွင် အလွတ်အဖြူကွက်များ သို့မဟုတ် လိုင်းအသစ်များကို စာသား node များအဖြစ် မဆက်ဆံပါ။
အောက်ပါဥပမာသည် root element ( book.xml ) ၏ကလေး node အရေအတွက်ကိုထုတ်ပေးလိမ့်မည်။ IE9 နှင့် အစောပိုင်းတွင် IE10 နှင့် နောက်ပိုင်းဗားရှင်းများတွင် ကလေး node 4 ခုကို ထုတ်မည်ဖြစ်ပြီး၊ အခြားဘရောက်ဆာများသည် ကလေး node 9 ခုကို ထုတ်ပါမည်-
ဥပမာ
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA - ပိုင်းခြားထားသော ဇာတ်ကောင်ဒေတာ
XML ခွဲခြမ်းစိတ်ဖြာသူများသည် ပုံမှန်အားဖြင့် XML စာရွက်စာတမ်းတစ်ခုရှိ စာသားအားလုံးကို ခွဲခြမ်းစိတ်ဖြာသည်။
XML ဒြပ်စင်တစ်ခုကို ခွဲခြမ်းစိပ်ဖြာသောအခါ၊ XML တဂ်များကြားရှိ စာသားကိုလည်း ခွဲခြမ်းစိတ်ဖြာသည်-
<message>This text is also parsed</message>
<name> ဒြပ်စင်တွင် အခြားဒြပ်စင်နှစ်ခု (ပထမနှင့် နောက်ဆုံး) ပါ၀င်သော ဤဥပမာတွင်ကဲ့သို့ အခြားသောဒြပ်စင်များပါရှိနိုင်သောကြောင့် ခွဲခြမ်းစိတ်ဖြာသူသည် ၎င်းကိုပြုလုပ်သည်။
<name><first>Bill</first><last>Gates</last></name>
နှင့် parser သည် ၎င်းကို ဤကဲ့သို့သော ဒြပ်စင်ခွဲများအဖြစ် ခွဲထုတ်ပါမည်-
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Parsed Character Data (PCDATA) သည် XML parser မှ ခွဲခြမ်းစိတ်ဖြာမည့် စာသားဒေတာအကြောင်း သုံးသည့်အသုံးအနှုန်းဖြစ်သည်။
CDATA - (ခွဲခြမ်းမထားသော) ဇာတ်ကောင်ဒေတာ
CDATA ဟူသော အသုံးအနှုန်းကို XML parser မှခွဲခြမ်းစိတ်ဖြာခြင်းမပြုသင့်သော စာသားဒေတာနှင့်ပတ်သက်၍ အသုံးပြုသည်။
"<" နှင့် "&" ကဲ့သို့သော ဇာတ်ကောင်များသည် XML ဒြပ်စင်များတွင် တရားမဝင်ပါ။
"<" သည် ၎င်းကို ဒြပ်စင်အသစ်တစ်ခု၏ အစအဖြစ် ခွဲခြမ်းစိတ်ဖြာထားသောကြောင့် "<" သည် အမှားအယွင်းတစ်ခုကို ထုတ်ပေးလိမ့်မည်။
ခွဲခြမ်းစိတ်ဖြာသူက ဇာတ်ကောင်တစ်ခု၏ အစအဖြစ် အဓိပ္ပာယ်ပြန်ဆိုသောကြောင့် "&" သည် အမှားအယွင်းတစ်ခုကို ထုတ်ပေးလိမ့်မည်။
JavaScript ကုဒ်ကဲ့သို့ စာသားအချို့တွင် "<" သို့မဟုတ် "&" စာလုံးများ အများအပြားပါရှိသည်။ အမှားများကိုရှောင်ရှားရန် script code ကို CDATA အဖြစ်သတ်မှတ်နိုင်သည်။
CDATA ကဏ္ဍအတွင်းရှိ အရာအားလုံးကို parser မှ လျစ်လျူရှုထားသည်။
CDATA အပိုင်းတစ်ခုသည် " <![CDATA[ " နှင့် စတင်ပြီး " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
အထက်ဖော်ပြပါ ဥပမာတွင်၊ CDATA ကဏ္ဍအတွင်းရှိ အရာအားလုံးကို parser မှ လျစ်လျူရှုထားသည်။
CDATA ကဏ္ဍများအတွက် မှတ်စုများ-
CDATA ကဏ္ဍတွင် "]]>" စာကြောင်း မပါဝင်နိုင်ပါ။ Nested CDATA ကဏ္ဍများကို ခွင့်မပြုပါ။
CDATA ကဏ္ဍ၏အဆုံးကို အမှတ်အသားပြုသော "]]>" တွင် နေရာလွတ်များ သို့မဟုတ် လိုင်းခွဲများ မပါဝင်နိုင်ပါ။