XML DOM วนหน้าตาและต้นไม้ของจุดศูนย์กลาง

วนหน้าตา (Traverse) หมายถึงการวนหน้าตาและต้นไม้ของจุดศูนย์กลาง

วนหน้าตาและต้นไม้ของจุดศูนย์กลาง

คุณมักจะต้องวน XML ไฟล์อยู่บ่อยครั้ง ตัวอย่างเช่น: เมื่อคุณต้องการดึงค่าของแต่ละองค์ประกอบ

กระบวนการนี้เรียกว่า “วนหน้าตาและต้นไม้ของจุดศูนย์กลาง”

ตัวอย่างนี้จะวนลูปผ่านเมื่อมีหลักฐานทั้งหมดของ <book> และแสดงชื่อและค่าของมัน

ตัวอย่าง

<!DOCTYPE html>
<html>

<body>
<script>
<p id="demo"></p>
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");
x = xmlDoc.documentElement.childNodes;
// documentElement จะเป็นจุดเชื่อมหลักตลอดเวลา
    for (i = 0; i < x.length ;i++) {
}
txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
</script>
document.getElementById("demo").innerHTML = txt;
</body>

ทดลองด้วยตัวเอง

</html>

  1. ตัวอย่างเรียกและชี้แจง: โหลด XML ซึ่งมีรูปแบบ string ไปยัง xmlDoc
  2. เข้าถึงเชื่อมทางลูกขององค์ประกอบราก
  3. แสดงชื่อของเชื่อมทุกตัว และค่าของจุดข้อความของเชื่อมนี้

ความแตกต่างระหว่างเบราเซอร์ในการที่เข้าใจ DOM

ทุกเบราเซอร์สมัยใหม่เข้าใจกฎระเบียบ W3C DOM:

แต่มีความแตกต่างบางอย่างระหว่างเบราเซอร์. ความแตกต่างสำคัญหนึ่งคือ:

วิธีที่พวกเขาจัดการกับช่องว่างและบรรทัดใหม่

DOM - ช่องว่างและบรรทัดใหม่

XML มักมีช่องว่างหรืออักษรอิริยาศาสตร์หรือช่องว่างเปล่าระหว่างจุดเชื่อม. นี่เป็นสถานการณ์ที่ตั้งตารางในกรณีที่แก้ไขเอกสารด้วยเครื่องงานแก้ไขที่เรียบง่ายเช่นบันทึกเหตุการณ์:

ตัวอย่างดังนี้ (แก้ไขด้วยบันทึกเหตุการณ์) มี CR/LF (ช่องว่างบรรทัด) ระหว่างบรรทัด และมีช่องว่างสองหลายแถวข้างหน้าแต่ละจุดเชื่อม:

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

Internet Explorer 9 และรุ่นก่อนหน้านี้จะไม่ยอมรับช่องว่างหรือบรรทัดใหม่เป็นจุดข้อความ แต่เบราเซอร์อื่นๆ จะทำด้วยทางนี้:

ตัวอย่างดังนี้จะแสดงจำนวนเชื่อมของเล่าขององค์ประกอบรากหรือ books.xml ซึ่งคือ 6 จำนวนเชื่อมสำหรับ IE9 และรุ่นก่อนหน้านี้ และเบราเซอร์อื่นๆ จะแสดง 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;
    }
        return 0;
    }
}
]]>
</script>

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

關於 CDATA 部分的注意事項:

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

標記 CDATA 部分結束的 "]]>" 不能包含空格或換行符。