أحدث البرامج التعليمية وتطوير الشبكة
 

XML DOM شجرة عقدة ترافيرس


تعبر وسائل حلقات من خلال أو السفر عبر شجرة عقدة.


عبور شجرة عقدة

في كثير من الأحيان تريد حلقة وثيقة XML، على سبيل المثال: عندما تريد استخراج قيمة كل عنصر.

وهذا ما يسمى "Traversing the node tree"

حلقات المثال التالي من خلال كل العقد التابعة لل<كتاب>، ويعرض أسماء وقيمهم:

مثال

<!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
انها محاولة لنفسك »

وأوضح سبيل المثال:

  1. تحميل سلسلة XML إلى xmlDoc
  2. الحصول على العقد التابعة للعنصر الجذر
  3. لكل عقدة الطفل، خرج اسم العقدة والقيمة عقدة عقدة النص

الاختلافات المتصفح في DOM توزيع

جميع المتصفحات الحديثة تدعم مواصفات W3C DOM.

ومع ذلك، هناك بعض الاختلافات بين المتصفحات. فارق واحد مهم هو:

  • الطريقة التي تتعامل بها، المساحات البيضاء وخطوط جديدة

DOM - الفراغات البيضاء وخطوط جديدة

XML غالبا ما يحتوي على سطر جديد أو أحرف المسافات بين العقد. هذا هو الحال عندما تم تحرير الوثيقة من قبل محرر بسيط مثل المفكرة في كثير من الأحيان.

المثال التالي (edited by Notepad) يحتوي على CR / LF (new line) بين كل سطر ومسافتين أمام كل عقدة الطفل:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

إنترنت إكسبلورر 9 وفي وقت سابق لا علاج خالي المساحات البيضاء، أو خطوط جديدة كما نص العقد، في حين تفعل المتصفحات الأخرى.

المثال التالي سيتم إخراج عدد من الأطفال الليمفاوية العنصر الجذر (of 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> يحتوي على عنصر عنصرين آخرين (first and last) :

<name><first>Bill</first><last>Gates</last></name>

ومحلل وتقسيمها إلى عناصر فرعية مثل هذا:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

البيانات الشخصية تحليل (PCDATA) هو مصطلح يستخدم حول البيانات النص الذي سيتم توزيعه من قبل محلل XML.


CDATA - (Unparsed) البيانات الشخصية

يتم استخدام CDATA المدى حول البيانات النصية التي لا ينبغي تحليل بواسطة محلل XML.

شخصيات مثل "<" و "&" غير قانونية في عناصر XML.

"<" سيولد خطأ لأن محلل يفسر على أنه بداية لعنصر جديد.

"&" سيولد خطأ لأن محلل يفسر على أنه بداية من كيان شخصية.

بعض النصوص، مثل شفرة جافا سكريبت، ويحتوي على الكثير من "<" أو "&" الأحرف. لتجنب يمكن تعريف أخطاء رمز البرنامج النصي كما CDATA.

يتم تجاهل كل شيء داخل قسم CDATA بواسطة محلل.

يبدأ قسم CDATA مع " <![CDATA[ " and ends with " ]]> " :

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

في المثال أعلاه، يتم تجاهل كل شيء داخل قسم CDATA بواسطة محلل.

Notes on CDATA sections:

لا يمكن أن يحتوي القسم CDATA سلسلة "]]>" . لا يسمح أقسام متداخلة CDATA.

و "]]>" الذي يصادف نهاية مقطع CDATA لا يمكن أن تحتوي على مسافات أو فواصل الأسطر.