XML DOM Traverse Node Tree
يعني العبور التنقل عبر شجرة العقدة أو التنقل عبرها.
عبور شجرة العقدة
غالبًا ما تريد تكرار مستند 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
- احصل على العقد الفرعية لعنصر الجذر
- لكل عقدة فرعية ، قم بإخراج اسم العقدة وقيمة العقدة الخاصة بالعقدة النصية
اختلافات المستعرض في تحليل DOM
تدعم جميع المتصفحات الحديثة مواصفات W3C DOM.
ومع ذلك ، هناك بعض الاختلافات بين المتصفحات. أحد الاختلافات المهمة هو:
- الطريقة التي يتعاملون بها مع المساحات البيضاء والخطوط الجديدة
DOM - مساحات بيضاء وخطوط جديدة
غالبًا ما يحتوي XML على سطر جديد ، أو أحرف مسافات بيضاء ، بين العقد. هذا هو الحال غالبًا عندما يتم تحرير المستند بواسطة محرر بسيط مثل Notepad.
المثال التالي (الذي تم تحريره بواسطة المفكرة) يحتوي على CR / LF (سطر جديد) بين كل سطر ومسافتين أمام كل عقدة فرعية:
<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.
عند تحليل عنصر 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>
بيانات الأحرف الموزعة (PCDATA) هي مصطلح يستخدم حول البيانات النصية التي سيتم تحليلها بواسطة محلل XML.
CDATA - (لم يتم تحليلها) بيانات الأحرف
يستخدم المصطلح CDATA حول البيانات النصية التي يجب ألا يتم تحليلها بواسطة محلل XML.
الأحرف مثل "<" و "&" غير قانونية في عناصر XML.
سينشئ "<" خطأ لأن المحلل اللغوي يفسره على أنه بداية عنصر جديد.
سينشئ "&" خطأ لأن المحلل اللغوي يفسره على أنه بداية كيان حرف.
تحتوي بعض النصوص ، مثل كود JavaScript ، على الكثير من الأحرف "<" أو "&". لتجنب الأخطاء يمكن تعريف كود البرنامج النصي على أنه CDATA.
يتم تجاهل كل شيء داخل قسم CDATA بواسطة المحلل اللغوي.
يبدأ قسم CDATA بـ " <! [CDATA [ " وينتهي بـ " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
في المثال أعلاه ، يتم تجاهل كل شيء داخل قسم CDATA بواسطة المحلل اللغوي.
ملاحظات على أقسام CDATA:
لا يمكن أن يحتوي مقطع CDATA على السلسلة "]]>". أقسام CDATA المتداخلة غير مسموح بها.
لا يمكن أن تحتوي "]]>" التي تشير إلى نهاية قسم CDATA على مسافات أو فواصل أسطر.