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>
- ตัวอย่างเรียกและชี้แจง:
โหลด XML ซึ่งมีรูปแบบ string ไปยัง
xmlDoc - เข้าถึงเชื่อมทางลูกขององค์ประกอบราก
- แสดงชื่อของเชื่อมทุกตัว และค่าของจุดข้อความของเชื่อมนี้
ความแตกต่างระหว่างเบราเซอร์ในการที่เข้าใจ 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 部分結束的 "]]>
" 不能包含空格或換行符。