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 Parsing
เบราว์เซอร์ที่ทันสมัยทั้งหมดรองรับข้อกำหนด W3C DOM
อย่างไรก็ตาม มีความแตกต่างบางประการระหว่างเบราว์เซอร์ ความแตกต่างที่สำคัญประการหนึ่งคือ:
- วิธีจัดการกับช่องว่างสีขาวและบรรทัดใหม่
DOM - ช่องว่างสีขาวและบรรทัดใหม่
XML มักจะมีบรรทัดใหม่หรืออักขระช่องว่างระหว่างโหนด กรณีนี้มักเกิดขึ้นเมื่อแก้ไขเอกสารโดยโปรแกรมแก้ไขง่ายๆ เช่น Notepad
ตัวอย่างต่อไปนี้ (แก้ไขโดย 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>
parser ทำเช่นนี้เนื่องจากองค์ประกอบ XML สามารถมีองค์ประกอบอื่นๆ ได้ ดังในตัวอย่างนี้ โดยที่องค์ประกอบ <name> มีองค์ประกอบอื่นๆ อีกสององค์ประกอบ (ตัวแรกและตัวสุดท้าย):
<name><first>Bill</first><last>Gates</last></name>
และ parser จะแบ่งออกเป็นองค์ประกอบย่อยดังนี้:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Parsed Character Data (PCDATA) เป็นคำที่ใช้เกี่ยวกับข้อมูลข้อความที่จะแยกวิเคราะห์โดย XML parser
CDATA - (ไม่แยกวิเคราะห์) ข้อมูลอักขระ
คำว่า CDATA ใช้เกี่ยวกับข้อมูลข้อความที่ไม่ควรแยกวิเคราะห์โดยตัวแยกวิเคราะห์ XML
อักขระเช่น "<" และ "&" เป็นสิ่งผิดกฎหมายในองค์ประกอบ XML
"<" จะสร้างข้อผิดพลาดเนื่องจาก parser ตีความว่าเป็นจุดเริ่มต้นขององค์ประกอบใหม่
"&" จะสร้างข้อผิดพลาดเนื่องจาก parser ตีความว่าเป็นจุดเริ่มต้นของเอนทิตีอักขระ
ข้อความบางข้อความ เช่น โค้ด JavaScript มีอักขระ "<" หรือ "&" จำนวนมาก เพื่อหลีกเลี่ยงข้อผิดพลาด รหัสสคริปต์สามารถกำหนดเป็น CDATA
ทุกอย่างภายในส่วน CDATA จะถูกละเว้นโดย parser
ส่วน CDATA เริ่มต้นด้วย " <![CDATA[ " และลงท้ายด้วย " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
ในตัวอย่างข้างต้น parser จะละเว้นทุกอย่างในส่วน CDATA
หมายเหตุเกี่ยวกับส่วน CDATA:
ส่วน CDATA ต้องไม่มีสตริง "]]>" ไม่อนุญาตให้ใช้ส่วน CDATA ที่ซ้อนกัน
"]]>" ที่ทำเครื่องหมายจุดสิ้นสุดของส่วน CDATA ต้องไม่มีการเว้นวรรคหรือขึ้นบรรทัดใหม่