Объектная модель документа
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- документу мы получим на экране следующий результат:
