traversing วิธีการวนลูปหรือผ่านการเดินทางข้ามต้นไม้โหนด
traversing ต้นไม้โหนด
บ่อยครั้งที่คุณต้องการที่จะห่วงเอกสาร XML ตัวอย่างเช่นเมื่อคุณต้องการที่จะดึงค่าของแต่ละองค์ประกอบ
นี้เรียกว่า "Traversing the node tree"
ตัวอย่างด้านล่าง loops ผ่านทุกโหนดลูกของ <หนังสือ> และแสดงชื่อและค่าของพวกเขา
ตัวอย่าง
<!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
เบราว์เซอร์ที่ทันสมัยสนับสนุนข้อกำหนดของ W3C DOM
แต่มีความแตกต่างบางอย่างระหว่างเบราว์เซอร์ หนึ่งความแตกต่างที่สำคัญคือ:
- วิธีที่พวกเขาจัดการช่องว่างสีขาวและสายใหม่
DOM - ช่องว่างสีขาวและสายใหม่
XML มักจะมีเส้นใหม่หรือตัวอักษรพื้นที่สีขาวระหว่างโหนด นี้มักจะเป็นกรณีเมื่อเอกสารถูกแก้ไขโดยโปรแกรมแก้ไขง่ายๆเช่น Notepad
ตัวอย่างต่อไปนี้ (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>
Internet Explorer 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 - แยกวิเคราะห์ข้อมูลตัวอักษร
parsers XML ปกติแยกข้อความทั้งหมดในเอกสาร XML
เมื่อองค์ประกอบ XML จะแยกข้อความระหว่างแท็ก XML ยังจะแยก:
<message>This text is also parsed</message>
ตัวแยกวิเคราะห์นี้ไม่ได้เพราะองค์ประกอบ XML สามารถมีองค์ประกอบอื่น ๆ เช่นในตัวอย่างนี้ที่ <name> องค์ประกอบที่มีสององค์ประกอบอื่น ๆ (first and last) :
<name><first>Bill</first><last>Gates</last></name>
และ parser จะแบ่งมันออกเป็นองค์ประกอบย่อยเช่นนี้
<name>
<first>Bill</first>
<last>Gates</last>
</name>
แจงข้อมูลตัวอักษร (PCDATA) เป็นคำที่ใช้เกี่ยวกับข้อมูลที่เป็นข้อความที่จะแยกวิเคราะห์โดยแยกวิเคราะห์ของ XML
CDATA - (Unparsed) ข้อมูลตัวอักษร
CDATA คำที่ใช้เกี่ยวกับข้อมูลที่เป็นข้อความที่ไม่ควรแยกวิเคราะห์โดยแยกวิเคราะห์ของ XML
ตัวอักษรเช่น "<" และ "&" ที่ผิดกฎหมายในองค์ประกอบ XML
"<" จะสร้างข้อผิดพลาดเนื่องจากแยกวิเคราะห์ตีความว่ามันเป็นจุดเริ่มต้นขององค์ประกอบใหม่
"&" จะสร้างข้อผิดพลาดเนื่องจากแยกวิเคราะห์ตีความว่ามันเป็นจุดเริ่มต้นของตัวอักษรกิจการ
ข้อความบางอย่างเช่นรหัส JavaScript, มีจำนวนมากของ "<" หรือ "&" ตัวละคร เพื่อหลีกเลี่ยงข้อผิดพลาดรหัสสคริปต์สามารถกำหนดเป็น 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 ไม่สามารถมีช่องว่างหรือแบ่งบรรทัด