XML DOM - แทนที่โหนด
ในบทนี้เราจะศึกษาเกี่ยวกับการดำเนินการแทนที่โหนดในอ็อบเจ็กต์ XML DOM ดังที่เราทราบดีว่าทุกอย่างใน DOM จะถูกเก็บรักษาไว้ในหน่วยข้อมูลลำดับชั้นที่เรียกว่าโหนดและโหนดแทนที่เป็นอีกวิธีหนึ่งในการอัปเดตโหนดที่ระบุเหล่านี้หรือโหนดข้อความ
ต่อไปนี้เป็นสองวิธีในการแทนที่โหนด
- replaceChild()
- replaceData()
แทนที่เด็ก ()
วิธีการreplaceChild ()แทนที่โหนดที่ระบุด้วยโหนดใหม่
ไวยากรณ์
insertData () มีไวยากรณ์ต่อไปนี้ -
Node replaceChild(Node newChild, Node oldChild) throws DOMException
ที่ไหน
newChild - คือโหนดใหม่ที่จะใส่ในรายการลูก
oldChild - คือโหนดที่ถูกแทนที่ในรายการ
วิธีนี้ส่งคืนโหนดที่ถูกแทนที่
ตัวอย่าง
ตัวอย่างต่อไปนี้ (replacenode_example.htm) แยกวิเคราะห์เอกสาร XML ( node.xml ) ลงในอ็อบเจ็กต์ XML DOM และแทนที่โหนดที่ระบุ <FirstName> ด้วยโหนดใหม่ <Name>
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(filename) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else // code for IE5 and IE6 {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",filename,false);
xhttp.send();
return xhttp.responseXML;
}
</script>
</head>
<body>
<script>
xmlDoc = loadXMLDoc("/dom/node.xml");
x = xmlDoc.documentElement;
z = xmlDoc.getElementsByTagName("FirstName");
document.write("<b>Content of FirstName element before replace operation</b><br>");
for (i=0;i<z.length;i++) {
document.write(z[i].childNodes[0].nodeValue);
document.write("<br>");
}
//create a Employee element, FirstName element and a text node
newNode = xmlDoc.createElement("Employee");
newTitle = xmlDoc.createElement("Name");
newText = xmlDoc.createTextNode("MS Dhoni");
//add the text node to the title node,
newTitle.appendChild(newText);
//add the title node to the book node
newNode.appendChild(newTitle);
y = xmlDoc.getElementsByTagName("Employee")[0]
//replace the first book node with the new node
x.replaceChild(newNode,y);
z = xmlDoc.getElementsByTagName("FirstName");
document.write("<b>Content of FirstName element after replace operation</b><br>");
for (i = 0;i<z.length;i++) {
document.write(z[i].childNodes[0].nodeValue);
document.write("<br>");
}
</script>
</body>
</html>
การดำเนินการ
บันทึกไฟล์นี้เป็น replacenode_example.htm บนเส้นทางเซิร์ฟเวอร์ (ไฟล์นี้และ node.xml ควรอยู่บนเส้นทางเดียวกันในเซิร์ฟเวอร์ของคุณ) เราจะได้ผลลัพธ์ตามที่แสดงด้านล่าง -
Content of FirstName element before replace operation
Tanmay
Taniya
Tanisha
Content of FirstName element after replace operation
Taniya
Tanisha
แทนที่ข้อมูล ()
เมธอด replaceData () แทนที่อักขระที่เริ่มต้นที่ออฟเซ็ตหน่วย 16 บิตที่ระบุด้วยสตริงที่ระบุ
ไวยากรณ์
replaceData () มีไวยากรณ์ต่อไปนี้ -
void replaceData(int offset, int count, java.lang.String arg) throws DOMException
ที่ไหน
offset - คือค่าชดเชยที่จะเริ่มแทนที่
count - คือจำนวนหน่วย 16 บิตที่จะแทนที่ หากผลรวมของค่าชดเชยและจำนวนเกินความยาวหน่วย 16 บิตทั้งหมดที่อยู่ท้ายข้อมูลจะถูกแทนที่
arg - DOMStringซึ่งต้องเปลี่ยนช่วง
ตัวอย่าง
ตัวอย่างต่อไปนี้ (แทนที่ata_example.htm ) แยกวิเคราะห์เอกสาร XML ( node.xml ) ลงในอ็อบเจ็กต์ XML DOM และแทนที่
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(filename) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else // code for IE5 and IE6 {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",filename,false);
xhttp.send();
return xhttp.responseXML;
}
</script>
</head>
<body>
<script>
xmlDoc = loadXMLDoc("/dom/node.xml");
x = xmlDoc.getElementsByTagName("ContactNo")[0].childNodes[0];
document.write("<b>ContactNo before replace operation:</b> "+x.nodeValue);
x.replaceData(1,5,"9999999");
document.write("<br>");
document.write("<b>ContactNo after replace operation:</b> "+x.nodeValue);
</script>
</body>
</html>
ในตัวอย่างข้างต้น -
x.replaceData (2,3, "999"); - ที่นี่xถือข้อความขององค์ประกอบที่ระบุ <ContactNo> ซึ่งข้อความจะถูกแทนที่ด้วยข้อความใหม่"9999999"เริ่มต้นจากตำแหน่ง1จนถึงความยาวของ5
การดำเนินการ
บันทึกไฟล์นี้เป็นแทนที่ ata_example.htmบนเส้นทางเซิร์ฟเวอร์ (ไฟล์นี้และ node.xml ควรอยู่บนเส้นทางเดียวกันในเซิร์ฟเวอร์ของคุณ) เราจะได้ผลลัพธ์ตามที่แสดงด้านล่าง -
ContactNo before replace operation: 1234567890
ContactNo after replace operation: 199999997890