एक्सएमएल डोम ट्रैवर्स नोड ट्री
ट्रैवर्सिंग का अर्थ है नोड ट्री के माध्यम से लूप करना या यात्रा करना।
नोड ट्री को पार करना
अक्सर आप एक XML दस्तावेज़ को लूप करना चाहते हैं, उदाहरण के लिए: जब आप प्रत्येक तत्व का मान निकालना चाहते हैं।
इसे "ट्रैवर्सिंग द नोड ट्री" कहा जाता है
नीचे दिया गया उदाहरण <book> के सभी चाइल्ड नोड्स से होकर गुजरता है, और उनके नाम और मान प्रदर्शित करता है:
उदाहरण
<!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 में लोड करें
- मूल तत्व के चाइल्ड नोड्स प्राप्त करें
- प्रत्येक चाइल्ड नोड के लिए, नोड नाम और टेक्स्ट नोड का नोड मान आउटपुट करें
डोम पार्सिंग में ब्राउज़र अंतर
सभी आधुनिक ब्राउज़र W3C DOM विनिर्देशन का समर्थन करते हैं।
हालाँकि, ब्राउज़रों के बीच कुछ अंतर हैं। एक महत्वपूर्ण अंतर है:
- जिस तरह से वे सफेद-रिक्त स्थान और नई लाइनों को संभालते हैं
डोम - सफेद स्थान और नई रेखाएं
एक्सएमएल में अक्सर नोड्स के बीच नई लाइन, या व्हाइट स्पेस कैरेक्टर होते हैं। यह अक्सर ऐसा होता है जब दस्तावेज़ को नोटपैड जैसे साधारण संपादक द्वारा संपादित किया जाता है।
निम्नलिखित उदाहरण (नोटपैड द्वारा संपादित) में प्रत्येक पंक्ति और प्रत्येक बच्चे के नोड के सामने दो रिक्त स्थान के बीच सीआर/एलएफ (नई लाइन) शामिल है:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 और इससे पहले के संस्करण खाली सफेद-रिक्त स्थान, या नई पंक्तियों को टेक्स्ट नोड्स के रूप में नहीं मानते हैं, जबकि अन्य ब्राउज़र ऐसा करते हैं।
निम्नलिखित उदाहरण मूल तत्व ( books.xml ) के चाइल्ड नोड्स की संख्या को आउटपुट करेगा । IE9 और इससे पहले के 4 चाइल्ड नोड्स आउटपुट करेंगे, जबकि IE10 और बाद के संस्करण, और अन्य ब्राउज़र 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 टैग के बीच का टेक्स्ट भी पार्स किया जाता है:
<message>This text is also parsed</message>
पार्सर ऐसा इसलिए करता है क्योंकि XML तत्वों में अन्य तत्व हो सकते हैं, जैसा कि इस उदाहरण में है, जहां <name> तत्व में दो अन्य तत्व शामिल हैं (प्रथम और अंतिम):
<name><first>Bill</first><last>Gates</last></name>
और पार्सर इसे इस तरह उप-तत्वों में तोड़ देगा:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
पार्स किए गए कैरेक्टर डेटा (पीसीडीएटीए) टेक्स्ट डेटा के बारे में इस्तेमाल किया जाने वाला शब्द है जिसे एक्सएमएल पार्सर द्वारा पार्स किया जाएगा।
सीडीएटीए - (अनपार्स्ड) कैरेक्टर डेटा
सीडीएटीए शब्द का प्रयोग टेक्स्ट डेटा के लिए किया जाता है जिसे एक्सएमएल पार्सर द्वारा पार्स नहीं किया जाना चाहिए।
XML तत्वों में "<" और "&" जैसे वर्ण अवैध हैं।
"<" एक त्रुटि उत्पन्न करेगा क्योंकि पार्सर इसे एक नए तत्व की शुरुआत के रूप में व्याख्या करता है।
"&" एक त्रुटि उत्पन्न करेगा क्योंकि पार्सर इसे एक चरित्र इकाई की शुरुआत के रूप में व्याख्या करता है।
जावास्क्रिप्ट कोड जैसे कुछ टेक्स्ट में बहुत सारे "<" या "&" वर्ण होते हैं। त्रुटियों से बचने के लिए स्क्रिप्ट कोड को सीडीएटीए के रूप में परिभाषित किया जा सकता है।
सीडीएटीए अनुभाग के अंदर सब कुछ पार्सर द्वारा अनदेखा किया जाता है।
एक सीडीएटीए अनुभाग " <![CDATA[ " से शुरू होता है और " ]]> " के साथ समाप्त होता है :
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
ऊपर के उदाहरण में, सीडीएटीए अनुभाग के अंदर सब कुछ पार्सर द्वारा अनदेखा किया जाता है।
सीडीएटीए अनुभागों पर नोट्स:
सीडीएटीए अनुभाग में "]]>" स्ट्रिंग नहीं हो सकती है। नेस्टेड सीडीएटीए अनुभागों की अनुमति नहीं है।
सीडीएटीए अनुभाग के अंत को चिह्नित करने वाले "]]>" में रिक्त स्थान या लाइन ब्रेक नहीं हो सकते हैं।