本章探讨XML DOM遍历。我们在前一章中研究了如何加载XML文档并解析由此获得的DOM对象。可以遍历此解析的DOM对象。遍历是通过在节点树中逐步遍历每个元素,以系统的方式进行循环的过程。
以下示例(traverse_example.htm)演示DOM遍历。这里我们遍历<Employee>元素的每个childNode。
<!DOCTYPE html> <html> <style> table,th,td { border:1px solid black; border-collapse:collapse } </style> <body> <div id="ajax_xml"> </div> <script> //if browser supports XMLHttpRequest if (window.XMLHttpRequest) {// Create an instance of XMLHttpRequest object. code for IE7+, Firefox, Chrome, Opera, Safari var xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // sets and sends the request for calling "node.xml" xmlhttp.open("GET","/dom/node.xml",false); xmlhttp.send(); // sets and returns the content as XML DOM var xml_dom=xmlhttp.responseXML; // this variable stores the code of the html table var html_tab = "<table id="id_tabel" align="center"><tr><th>Employee Category</th><th>FirstName</th><th>LastName</th><th>ContactNo</th><th>Email</th></tr>"; var arr_employees = xml_dom.getElementsByTagName("Employee"); // traverses the "arr_employees" array for(var i=0; i<arr_employees.length; i++) { var employee_cat = arr_employees[i].getAttribute("category"); // gets the value of "category" element of current "Element" tag // gets the value of first child-node of "FirstName" element of current "Employee" tag var employee_firstName = arr_employees[i].getElementsByTagName("FirstName")[0].childNodes[0].nodeValue; // gets the value of first child-node of "LastName" element of current "Employee" tag var employee_lastName = arr_employees[i].getElementsByTagName("LastName")[0].childNodes[0].nodeValue; // gets the value of first child-node of "ContactNo" element of current "Employee" tag var employee_contactno = arr_employees[i].getElementsByTagName("ContactNo")[0].childNodes[0].nodeValue; // gets the value of first child-node of "Email" element of current "Employee" tag var employee_email = arr_employees[i].getElementsByTagName("Email")[0].childNodes[0].nodeValue; // adds the values in the html table html_tab += "<tr><td>"+ employee_cat+ "</td><td>"+ employee_firstName+ "</td><td>"+ employee_lastName+ "</td><td>"+ employee_contactno+ "</td><td>"+ employee_email+ "</td></tr>"; } html_tab += "</table>"; // adds the html table in a html tag, with id="ajax_xml" document.getElementById("ajax_xml").innerHTML = html_tab; </script> </body> </html>
此代码加载node.xml。
接下来,将XML内容转换为JavaScript XML DOM对象。
接下来,获取使用方法getElementsByTagName()的元素数组(带有标签元素)。
接下来,我们遍历这个数组,并在表中显示childNode值。
在服务器路径上将此文件另存为traverse_example.html(此文件和node.xml应位于服务器中相同的路径上)。将显示如下输出: