XML DOM - การเข้าถึงโหนด
ด้วย DOM คุณสามารถเข้าถึงทุกโหนดในเอกสาร XML
ลองด้วยตัวคุณเอง - ตัวอย่าง
ตัวอย่างด้าน ล่างใช้ไฟล์ XML books.xml
ใช้เมธอด getElementsByTagName() เพื่อรับองค์ประกอบ <title> ที่สามใน "books.xml"
ใช้คุณสมบัติ length เพื่อวนซ้ำองค์ประกอบ <title> ทั้งหมดใน "books.xml"
ใช้คุณสมบัติ nodeType เพื่อรับประเภทโหนดขององค์ประกอบรูทใน "books.xml"
วนซ้ำ ใช้คุณสมบัติ nodeType เพื่อประมวลผลโหนดองค์ประกอบใน "books.xml" เท่านั้น
ใช้คุณสมบัติ nodeType และคุณสมบัติ nextSibling เพื่อประมวลผลโหนดองค์ประกอบใน "books.xml"
การเข้าถึงโหนด
คุณสามารถเข้าถึงโหนดได้สามวิธี:
1. โดยใช้เมธอด getElementsByTagName()
2. โดยการวนซ้ำ (traversing) โหนดทรี
3. โดยการนำทางโหนดทรีโดยใช้ความสัมพันธ์ของโหนด
เมธอด getElementsByTagName()
getElementsByTagName() ส่งคืนองค์ประกอบทั้งหมดที่มีชื่อแท็กที่ระบุ
ไวยากรณ์
node.getElementsByTagName("tagname");
ตัวอย่าง
ตัวอย่างต่อไปนี้ส่งคืนองค์ประกอบ <title> ทั้งหมดภายใต้องค์ประกอบ x:
x.getElementsByTagName("title");
โปรดทราบว่าตัวอย่างด้านบนจะส่งคืนเฉพาะองค์ประกอบ <title> ภายใต้โหนด x ในการส่งคืนองค์ประกอบ <title> ทั้งหมดในเอกสาร XML ให้ใช้:
xmlDoc.getElementsByTagName("title");
โดยที่ xmlDoc เป็นเอกสารเอง (โหนดเอกสาร)
รายการโหนด DOM
เมธอด getElementsByTagName() ส่งคืนรายการโหนด รายการโหนดคืออาร์เรย์ของโหนด
x = xmlDoc.getElementsByTagName("title");
<title> องค์ประกอบใน x สามารถเข้าถึงได้โดยหมายเลขดัชนี ในการเข้าถึง <title> ที่สาม คุณสามารถเขียน::
y = x[2];
หมายเหตุ:ดัชนีเริ่มต้นที่ 0
คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับรายการโหนดในบทต่อๆ ไปของบทช่วยสอนนี้
ความยาวของรายการโหนด DOM
คุณสมบัติ length กำหนดความยาวของรายการโหนด (จำนวนโหนด)
คุณสามารถวนซ้ำรายการโหนดโดยใช้คุณสมบัติ length:
ตัวอย่าง
var
x = xmlDoc.getElementsByTagName("title");
for (i = 0; i <x.length; i++) {
//
do something for each node
}
ประเภทโหนด
คุณสมบัติdocumentElementของเอกสาร XML คือโหนดรูท
คุณสมบัติnodeNameของโหนดคือชื่อของโหนด
คุณสมบัติnodeTypeของโหนดคือประเภทของโหนด
คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับคุณสมบัติของโหนดในบทถัดไปของบทช่วยสอนนี้
ข้ามโหนด
โค้ดต่อไปนี้วนซ้ำผ่านโหนดย่อย ที่เป็นโหนดองค์ประกอบ ของโหนดรูทด้วย:
ตัวอย่าง
txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i <x.length; i++)
{
// Process only element nodes (type 1)
if (x[i].nodeType == 1) {
txt += x[i].nodeName + "<br>";
}
}
ตัวอย่างอธิบาย:
- สมมติว่าคุณโหลด " books.xml " ลงใน xmlDoc
- รับโหนดย่อยขององค์ประกอบรูท (xmlDoc)
- สำหรับโหนดชายน์แต่ละโหนด ให้ตรวจสอบประเภทโหนด หากประเภทโหนดคือ "1" แสดงว่าเป็นโหนดองค์ประกอบ
- ส่งออกชื่อของโหนดหากเป็นโหนดองค์ประกอบ
การนำทางความสัมพันธ์ของโหนด
รหัสต่อไปนี้นำทางต้นไม้โหนดโดยใช้ความสัมพันธ์ของโหนด:
ตัวอย่าง
x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i <xlen; i++)
{
// Process only element nodes (type 1)
if (y.nodeType == 1) {
txt += y.nodeName + "<br>";
}
y = y.nextSibling;
}
ตัวอย่างอธิบาย:
- สมมติว่าคุณโหลด " books.xml " ลงใน xmlDoc
- รับโหนดย่อยขององค์ประกอบหนังสือเล่มแรก
- ตั้งค่าตัวแปร "y" ให้เป็นโหนดย่อยแรกขององค์ประกอบหนังสือเล่มแรก
- สำหรับแต่ละโหนดย่อย (เริ่มต้นด้วยโหนดย่อยแรก "y"):
- ตรวจสอบประเภทโหนด หากประเภทโหนดคือ "1" แสดงว่าเป็นโหนดองค์ประกอบ
- ส่งออกชื่อของโหนดหากเป็นโหนดองค์ประกอบ
- ตั้งค่าตัวแปร "y" ให้เป็นโหนดย่อยถัดไป และรันผ่านลูปอีกครั้ง