XML DOM düğüm ağacını dolaşmak

Dolaşmak (Traverse) terimi, düğüm ağacını dolaşmak anlamına gelir.

Düğüm ağacını dolaşmak

Sıkça XML belgelerini döngülemek gerekir, örneğin: her bir elemanın değerini çıkarmak istediğinizde.

Bu süreç 'düğüm ağacını dolaşmak' olarak adlandırılır

Aşağıdaki örnek, <book> alt elemanlarının tümünü döngüyle tarar ve adlarını ve değerlerini gösterir:

Örnek

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>雅舍谈吃</title>" +
"<author>梁实秋</author>" +
"<year>2013</year>" +
"</book>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
// documentElement her zaman kök düğümü temsil eder
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>

Kişisel olarak deneyin

Örnek açıklaması:

  1. XML dizgesini xmlDoc içinde
  2. Kök elementin alt düğümünü alın
  3. Her alt düğümün adını ve metin düğüm değerini çıktı verin

Tarayıcıların DOM çözümleme alanındaki farklılıkları

Tüm modern tarayıcılar W3C DOM normlarını destekler.

Ancak, tarayıcılar arasında bazı farklılıklar vardır. Önemli bir fark şudur:

Boşluk ve satır sonlandırma işleme şekilleri

DOM - Boşluk ve satır sonlandırma

XML genellikle düğümler arasında satır sonlandırma karakteri veya boşluk karakteri içerir. Not Defteri gibi basit düzenleyicilerle belgeyi düzenlerken genellikle bu durumu görürsünüz.

Aşağıdaki örnek (Not Defteri ile düzenlendi) her satır arasında CR/LF (Satır sonlandırma karakteri) içerir ve her alt düğümün önünde iki boşluk vardır:

<book>
  <title>雅舍谈吃</title>
  <author>梁实秋</author>
  <press>江苏文艺出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>

Internet Explorer 9 ve daha eski sürümler boşluk veya yeni satırı metin düğüm olarak görmeyecek, diğer tarayıcılar ise bu şekilde görecektir.

Örnek, kök elementin (books.xml) sahip olduğu alt düğüm sayısını çıktı verecektir. IE9 ve daha eski sürümler 6 adet alt düğüm çıktı verecek, IE10 ve daha sonraki sürümler ve diğer tarayıcılar 9 adet alt düğüm çıktı verecektir:

Örnek

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    " alt düğüm sayısı: " + x.length;
}

Kişisel olarak deneyin

PCDATA -解析edilen karakter verileri (Parsed Character Data)

XML解析leyicileri genellikle XML belgesindeki tüm metni解析 eder.

XML bileşenlerini解析 ederken, XML işaretleri arasındaki metin de解析 edilir:

<message> Bu metin de解析edilir</message>

Parser bu işlemi gerçekleştirir çünkü XML bileşenleri, bu örnekte gösterildiği gibi, diğer bileşenleri içerebilir, örneğin <name> bileşeni first ve last iki başka bileşeni içerir:

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

Parser, aşağıdaki gibi alt bileşenlere ayırır:

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

“解析edilen karakter verileri” (PCDATA) bu terim, XML解析leyicisi tarafından解析edilecek metin verilerini tanımlamak için kullanılır.

CDATA -解析edilmeyen karakter verileri (Unparsed Character Data)

CDATA terimi, XML解析leyicisi tarafından解析edilmemesi gereken metin verilerini tanımlamak için kullanılır.

"<" ve "&" gibi karakterler XML bileşenlerinde yasadışıdır.

"<" hata oluşturur, çünkü解析leyici bunu yeni bir bileşenin başlangıcı olarak yorumlar.

"&" hata oluşturur, çünkü解析leyici bunu karakter entitiğinin başlangıcı olarak yorumlar.

Bazı metinler (örneğin JavaScript kodu) çok sayıda "<" veya "&" karakteri. Hataları önlemek için betik kodunu CDATA olarak tanımlayabilirsiniz.

CDATA kısmındaki tüm içerikler解析leyici tarafından göz ardı edilir.

CDATA kısmı "<![CDATA[" Başlangıç, "]]>" Sonuç:

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

Yukarıdaki örnekte,解析ıcı CDATA bölümündeki tüm içerikleri göz ardı eder.

CDATA Bölümü Hakkında Dikkat Edilecekler:

CDATA bölümü " stringi içermemelidir.]]>". CDATA bölümleri iç içe geçirilemez.

CDATA bölümünü işaretleyen "]]>" boşluk veya satır başı içermemelidir.