Программная обработка XML документов с помощью XML DOM
Порядок выполнения лабораторной работы
При выполнении данной лабораторной работы потребуется XML документ timetable.xml, который использовался в "Структура XML документа. XML схемы" :
<?xml version="1.0"?>
<timetable>
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>- Создание JavaScript сценария загрузки XML документа.
Создайте текстовый файл loadxmldoc.js, содержащий описание функции загрузки XML документа:
function loadXMLDoc(dname) { try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load(dname); return(xmlDoc); } catch(e) { alert(e.message) } return(null); }и сохраните его в той же папке, где находится файл timetable.xml.
Код вызова этой функции может выглядеть следующим образом:
<html> <head> <script type="text/javascript" src="loadxmldoc.js"> </script> </head> <body> <script type="text/javascript"> xmlDoc=loadXMLDoc("timetable.xml"); document.write("xmlDoc is loaded, ready for use"); </script> </body> </html> - Перемещение по дереву узлов.
Подготовьте следующую HTML страницу:
<html> <head> <script type="text/javascript" src="loadxmldoc.js"> </script> </head> <body> <script type="text/javascript"> xmlDoc = loadXMLDoc("timetable.xml"); x = xmlDoc.getElementsByTagName("subject"); for (i=0; i<x.length; i++) { document.write(x[i].childNodes[0].nodeValue); document.write("<br />"); } </script> </body> </html>После загрузки страницы в браузере можно будет увидеть следующий результат:
DeutschSAP AdministrationSAP Administration
- Изменение значения элемента.
Следующий пример демонстрирует изменение значения элемента <subject>:
xmlDoc=loadXMLDoc("timetable.xml");x=xmlDoc.getElementsByTagName("subject")[0].childNodes[0]; x.nodeValue="Java programming"; x = xmlDoc.getElementsByTagName("subject"); for (i=0; i<x.length; i++) { document.write(x[i].childNodes[0].nodeValue); document.write("<br />"); }Внесите соответствующие изменения в предыдущую страницу и загрузите ее в браузере.
- Перемещение по узлам дерева с использованием отношений между ними.
Следующий код показывает, как используя отношения firstChild и nextSibling можно получить для текущего узла список его дочерних узлов:
x = xmlDoc.getElementsByTagName("lesson")[0].childNodes; y = xmlDoc.getElementsByTagName("lesson")[0].firstChild; for (i = 0; i < x.length; i++) { if (y.nodeType == 1) { document.write(y.nodeName + "<br />"); } y=y.nextSibling; }Внесите необходимые изменения в html страницу и загрузите ее в браузере.
Контрольное задание
В приведенном ниже XML документе описана экзаменационная ведомость:
<gradeReport id="120851"> <date>10-06-2008</date> <subject>Computer Science Fundamentals</subject> <examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList> </gradeReport>