Pengulangan XML DOM pohon node

arti dari mengulangi (Traverse) adalah mengulangi pohon node.

mengulangi pohon node

Anda sering memerlukan pengulangan dokumen XML, seperti: ketika Anda ingin mengekstrak nilai setiap elemen.

proses ini disebut 'mengulangi pohon node'

contoh ini mengulangi semua anak <book> dan menampilkan namanya dan nilai nya:

Contoh

<!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 selalu mewakili node root
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>

Cuba sendiri

Penjelasan contoh:

  1. Memuat string XML ke xmlDoc di
  2. Ambil anak node elemen root
  3. Keluarkan nama setiap anak node, serta nilai node teksnya

Perbedaan diantara browser dalam analisis DOM

Seluruh browser modern mendukung standar W3C DOM.

Namun, ada beberapa perbedaan diantara browser. Perbedaan penting satu adalah:

Cara mereka menangani spasi dan baris baru

DOM - Spasi dan Baris Baru

XML biasanya mengandung simbol baris baru atau spasi di antara node. Kapan menggunakan editor sederhana seperti Notepad untuk mengedit dokumen, biasanya terjadi hal ini.

Contoh yang di bawah ini (diedit dengan Notepad) mengandung CR/LF (simbol baris baru) di antara setiap baris, dan terdapat 2 spasi di depan setiap anak node:

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

Internet Explorer 9 dan versi sebelumnya tidak akan menganggap spasi atau baris baru sebagai node teks, sedangkan browser lainnya akan melakukan hal ini.

Contoh yang di bawah ini akan mengeluarkan jumlah anak node (books.xml) yang dimiliki elemen root. Versi IE9 dan sebelumnya akan mengeluarkan 6 anak node, sementara versi IE10 dan seterusnya serta browser lainnya akan mengeluarkan 9 anak node:

Contoh

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Bilangan anak nod: " + x.length;
}

Cuba sendiri

PCDATA - Data Karakter Dipecah (Parsed Character Data)

Pemecah XML biasanya akan memecah semua teks dalam dokumen XML.

Pada masa memecah elemen XML, teks di antara tanda markah juga akan dipecah:

<message>Teks ini juga akan dipecah</message>

Pemecah menjalankan tindakan ini kerana elemen XML boleh mengandungi elemen lain, seperti contoh ini, di mana elemen <name> mengandungi dua elemen lain (first dan last):

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

Pemecah akan memecahkan ia kepada subelemen berikut:

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

“Pemecahan Data Karakter” (PCDATA) adalah istilah yang digunakan untuk mendeskripsikan teks data yang akan dipecah pemecah XML.

CDATA - Data Karakter Tidak Dipecah (Unparsed Character Data)

Termin CDATA digunakan untuk mendeskripsikan teks data yang tidak seharusnya dipecah pemecah XML.

"<" dan "&" dan sebagainya adalah haram di dalam elemen XML.

"<" akan menghasilkan kesalahan kerana pemecah menginterpretasikannya sebagai permulaan elemen baru.

"&" akan menghasilkan kesalahan kerana pemecah menginterpretasikannya sebagai permulaan entiti aksan.

Beberapa teks (contohnya kod JavaScript) mengandungi banyak "<" atau "&" aksan. Untuk mengelakkan kesalahan, boleh merujuk kod skrip sebagai CDATA.

CDATA bahagian dalam semua kandungan akan diabaikan pemecah.

CDATA bahagian dengan "<![CDATA[" mulai, dengan "]]>" tamat:

<script>
<![CDATA[
function matchwo(a,b) {
    jika (a < b dan a < 0) {
        kembalikan 1;
    else {
        kembalikan 0;
    }
}
]]>
</script>

在上面的示例中,解析器会忽略 CDATA 部分内的所有内容。

关于 CDATA 部分的注意事项:

CDATA 部分不能包含字符串 "]]>"。不允许嵌套 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或换行符。