XML DOM نقاط درخت کا حلقه بندی

حلقه بندی (Traverse) کا مطلب نقاط درخت کا حلقه بندی کرنا ہے。

نقاط درخت کا حلقه بندی

آپ کثیراً XML دستاویزات کو حلقه میں لگانے کی ضرورت رکھتے ہیں، مثلاً: جب آپ کسی عناصر کی ویلو کو نکالنا چاہتے ہیں تو。

یہ عمل 'نقاط درخت کا حلقه بندی' کہلاتا ہے

یہ مثال <book> کے تمام ذیلی نقاط کو حلقه میں لگاتا ہے اور ان کے نام اور کی ویلو دیکھاتا ہے:

مثال

<!DOCTYPE html>
<html>

<script> var x, i ,xmlDoc; var txt = ""; var text = "" + "雅舍谈吃" + "梁实秋" + "2013" + ""; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); // documentElement 始终表示根节点 x = xmlDoc.documentElement.childNodes; for (i = 0; i < x.length ;i++) { txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "
"; } document.getElementById("demo").innerHTML = txt; </script>

خودتان امتحان کنید

例子解释:

  1. 将 XML 字符串加载到 xmlDoc
  2. 获取根元素的子节点
  3. 输出每个子节点的名称,以及其文本节点的节点值

浏览器在 DOM 解析方面的差异

所有现代浏览器都支持 W3C DOM 规范。

但是,浏览器之间存在一些差异。一个重要的区别是:

它们处理空白和换行的方式

DOM - 空白和换行

XML 通常在节点之间包含换行符或空白字符。当使用记事本等简单编辑器编辑文档时,通常会出现这种情况。

下面的例子(由记事本编辑)在每行之间包含 CR/LF(换行符),并且每个子节点前面有两个空格:


  雅舍谈吃
  梁实秋
  江苏文艺出版社
  2013
  35
  9787539962771

Internet Explorer 9 及更早版本不会将空白或新行视为文本节点,而其他浏览器则会这样做。

下面的例子将输出根元素(books.xml)拥有的子节点数。IE9 及之前版本会输出 6 个子节点,而 IE10 及以后版本以及其他浏览器会输出 9 个子节点:

مثال

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "تعداد فرزندان: " + x.length;
}

خودتان امتحان کنید

PCDATA - داده‌های نماد تحلیل شده (Parsed Character Data)

معمولاً پردازنده XML تمام متون موجود در مستند XML را تحلیل می‌کند.

در هنگام تحلیل عناصر XML، متن بین علامت‌های XML نیز تحلیل خواهد شد:

<message>این متن نیز تحلیل خواهد شد</message>

پردازنده این عمل را انجام می‌دهد زیرا عناصر XML می‌توانند شامل عناصر دیگر باشند، مانند مثال زیر، جایی که عنصر <name> شامل دو عنصر دیگر (first و last) است:

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

پردازنده آن را به زیرعناصر زیر تجزیه خواهد کرد:

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

واژه "PCDATA" برای توصیف داده‌هایی که باید توسط پردازنده XML تحلیل شوند، استفاده می‌شود.

CDATA - داده‌های نماد غیرتحلیل شده (Unparsed Character Data)

واژه CDATA برای توصیف داده‌هایی که نباید توسط پردازنده XML تحلیل شوند، استفاده می‌شود.

"<" و "&" و سایر کاراکترها در عناصر XML غیرقانونی هستند.

"<" باعث خطا می‌شود، زیرا پردازنده آن را به عنوان شروع یک عنصر جدید در نظر می‌گیرد.

"&" باعث خطا می‌شود، زیرا پردازنده آن را به عنوان شروع یک实体 نماد تبدیل می‌کند.

بعضی متون (مثلاً کد JavaScript) شامل تعداد زیادی "<" یا "&" برای جلوگیری از خطا، می‌توان کد اسکریپت را به عنوان CDATA تعریف کرد.

تمام محتوای جزییات CDATA توسط پردازنده نادیده گرفته خواهد شد.

CDATA جزییات با "<![CDATA[" شروع، با "]]>" خاتمة:

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    else {
        بازگرداندن 0;
    }
}
]]>
</script>

در مثال‌های بالا، پردازش‌کننده همه محتوای درون بخش‌های CDATA را نادیده می‌گیرد.

نکات توجه در مورد بخش‌های CDATA:

بخش‌های CDATA نمی‌توانند شامل رشته “” باشند]]>“”。ممکن نیست بخش‌های CDATA درون هم قرار گیرند。

مقصد پایان بخش CDATA “”]]>“” 不能包含空格或换行符。