Беларусь, Минск |
Объектная модель документа
DOM и базы данных
Язык XML предоставляет идеальный механизм обмена информацией между различными базами данных. По своей природе базы данных являются закрытыми - в каждой базе используется своя структура имен элементов, свой уровень нормализации и даже свои методы описания перечисляемой информации. С помощью модели DOM можно упростить передачу информации между различными базами данных.
Применение DOM для создания комплексных документов XML
Модель DOM - это модель с произвольной выборкой, т.е. узел может быть создан или прикреплен в любом месте дерева XML в любой момент времени. Эта особенность очень полезна при создании документов XML на основе информации иерархической или реляционной базы данных.
Создать документ XML с помощью модели DOM значительно проще, чем записывать информацию в текстовый файл. Вместо того чтобы все время перемещаться между таблицами в поисках требуемой информации, всю информацию из каждой таблицы можно записать одновременно. С увеличением глубины дерева узлов первый метод становится все более и более запутанным, в то время как второй легко масштабируется. Кроме того, генерация документа с помощью модели DOM гарантирует его правильное оформление.
Пример использования модели DOM.
Рассмотрим простейший пример обработки XML документа с использованием DOM модели.
Рассмотрим следующий XML документ:
<example type="listing"> <?xml version="1.0" encoding="windows-1251"?> <?xml-stylesheet type='text/xsl' href='1.xsl'?> <book> <title>Языки информационного обмена </title> <type> Лекции </type> <file>Лекции.doc</file> </book>
Для отображения данного документа можно использовать следующий простой рекурсивный цикл.
<html> <!-- Эта программа загружает XML-документ в браузер IE5 и проходит все узлы, используя рекурсивную функцию, применяя к ним необходимый стиль оформления --> <!-- Загружаем XML-документ--> <XML ID="xdoc" SRC="documents.xml"></XML> <SCRIPT> //Создаем объект документа var myDoc=xdoc; //Просматриваем документ применяя к каждому тегу свой стиль оформления --> x=getchildren(myDoc); //***************Начало рекурсивной функции************* function getchildren(node) { var x=node.childNodes; var z=x.length; if (z!=0) { for(var i=0;i<z;i++) { if (x(i).nodeType==3) { document.write(x(i).nodeValue); document.write(); getchildren(x(i)); } else if (x(i).nodeName=="title") { document.write("<DIV STYLE='font-size:20pt;color:red;'>"); getchildren(x(i)); document.write("</DIV>"); document.write("</br>"); } else if (x(i).nodeName=="type") { document.write("<DIV STYLE='font-size:14pt;color:black;'>"); getchildren(x(i)); document.write("</DIV>"); document.write("</br>"); } else if (x(i).nodeName=="file") { document.write("<DIV STYLE='font-size:16pt;'>"); document.write("<a href="); getchildren(x(i)); document.write(">"); document.write("Файл"); document.write("</a>"); document.write("</DIV>"); document.write("</br>"); } else { getchildren(x(i)); } } } } </SCRIPT> </html>Листинг 6.1.
Функция getchildren кода принимает в качестве параметра узел, создает список всех дочерних узлов, проходит по этому списку, проверяя, имеет ли каждый дочерний узел свои собственные дочерние узлы, и если имеет, то вызывает сама себя. При этом к тегам с именами title, type, file применяются соответствующие стили.
Применив эту функцию к нашему XML- документу мы получим на экране следующий результат: