http://blagtalkan.ru
http://oktpoisk.ru
http://mysorru.ru/
http://san-okt.ru/
http://pes6evolution.ru/
http://chasikigov.ru
http://serafimsovet.ru
http://filmsgov.ru
http://free-domen.ru
http://fithonda.ru/forums/index.php
http://avtogov.ru
http://www.1001bilet.com.ua/base/on-line/
http://pravilavoini.ru
http://school41ufa.ru
http://rusrav4.ru
Обход документа XML DOM в IE | Книга AJAX
 

Структура XML DOM очень похожа на структуру HTML DOM: это иерархическая древовидная структура. В вершине дерева расположе¬но свойство documentElement, содержащее корневой элемент дерева документа. Отсюда (из корня) можно получить доступ к любому эле¬менту или атрибуту в документе с помощью свойств, перечисленных в табл. 4.1.Присвоив значение свойства documentElement переменной oRoot, мы из¬бавляем себя от лишней работы в будущем, но такое присваивание со¬всем не обязательно.1 С помощью свойства firstChild мы записываем в переменную oFi rstBook ссылку на первый элемент , поскольку он является первым дочерним элементом узла .
Того же самого результата можно достичь, обратившись к массиву
rrildNodes:
var oFirstBook2 = oRoot.childNodes[0];
Первый элемент этого массива представляет первый дочерний узел элемента.2 Тип свойства childNodes соответствует типу NodeList в Java¬Script, поэтому можно узнать количество дочерних узлов с помощью свойства length:
j- var iChildren = oRoot.childNodes.length;
В атом примере в переменную iChild ren будет записано значение 4, по¬скольку корневой элемент документа имеет четыре дочерних узла.
Как уже говорилось, узлы могут иметь дочерние элементы, но они мо-iyr иметь и родительские элементы. Свойство parentNode возвращает родительский узел для текущего элемента:
Щруаг oParent = oFirstBook. parentNode; . ч
Мы уже встречались с oFirstBook чуть выше, коротко напомним, что эта переменная представляет первый элемент в документе. Свойство parentNode этого элемента ссылается на элемент -свойство documentElement объекта DOM.
Что если текущим узлом является элемент и требуется выбрать другой элемент ? Элементы являются братскими по отно-ввению друг к другу, поскольку у них общий прямой предок. Для выбо¬ра братских по отношению к текущему узлов предназначены свойства ■wtSibling и previousSibling. Свойство nextSibling ссылается на следую-щшя братский узел, а свойство previousSibling - на предыдущий:
Щ.каг oSecondBook = oFirstBook.nextSibling;
■rflFirstBook2 - oSecondBook.previousSibling;
В этом фрагменте кода ссылка на второй элемент записывав переменную oSecondBook. А в переменную oFirstBook2 записыва ссылка на братский узел, предыдущий по отношению к oSecondB В результате в переменной oFirstBook2 оказывается та же ссылка, к рая была записана туда раньше. Если узел не имеет следующего за с~ братского узла, в свойстве nextSibling окажется пустая ссылка, т. null. То же самое относится к свойству previousSibling: если узел не ет предшествующего братского узла, то это свойство будет содер: пустую ссылку - null.
Узнав, как обращаться к элементам дерева документа, перейдем к влечению данных из узлов. Например, чтобы извлечь текст, соде щийся в третьем элементе , обратимся к свойству text:
var sText = oRoot.childNodes[2].text;
Свойство text извлекает все текстовые узлы, содержащиеся в з ном элементе. Это чрезвычайно полезное свойство, но присутс оно только в реализации от Microsoft. Доступ к текстовым узлам использования свойства text можно получить так:
var sText = oRoot.childNodes[2].firstChild.nodeValue;
Этот код дает тот же результат, что и свойство text. Аналогично дыдущей конструкции доступ к третьему элементу про дится с помощью массива childNodes, после чего извлекается ссылка текстовый узел с помощью свойства firstChild, поскольку тексто узел остается узлом дерева DOM. Затем с помощью свойства nodeV= извлекается текст - значение текущего узла.
Результаты работы двух последних фрагментов идентичны, од на текстовых узлах свойство text ведет себя иначе, чем свойство п Value. Свойство text отыскивает значения всех текстовых узлов, со жащихся в пределах самого элемента и его дочерних элементов, как nodeValue извлекает значение только текущего узла. Свойство очень удобное, но оно иногда возвращает больше текста, чем необх мо. Рассмотрим немного модифицированный документ XML:

Professional Ajax
Nicholas C. Zakas, Jeremy McPeak, Joe Fawcett
Professional JavaScript for Web Developers Professional C# Professional Visual Basic 6 Databases
В первый элемент этого обновленного документа добавлены два дополнительных дочерних узла, содержащих название книги и сведе-жжя об авторах. Прибегнем к свойству text еще раз:
* alert(oFirstChild.text);
Как видите, сам код не содержит ничего нового. Однако взгляните на ре¬зультат, показанный на рис. 4.1.
Обратите внимание, что текстовые узлы были извлечены из элементов ctitle /> и и конкатенированы. В этом и заключается разли¬чие между свойствами text и nodevalue. Свойство nodevalue возвращает «качение только текущего узла, а свойство text - всех текстовых уз¬лов, содержащихся в текущем.
Кроме этого MSXML предоставляет ряд методов для извлечения кон¬кретных узлов и их значений. Из них чаще всего применяются getAtt-noute() и getElementsByTagNameQ.
Метод getAttribute() принимает в виде аргумента строку, содержащую атрибута, и возвращает значение этого атрибута. Если атрибут
с заданным именем отсутствует, метод возвращает значение пи На примере того же самого документа XML, который был представ, ранее в этом разделе, рассмотрим работу следующего фрагмента ко
var sAttribute = oFirstChild.getAttribute("isbn"); alert(sAttribute); 4 " s'">
Этот код извлекает значение атрибута isbn из первого элемента внутри документа и зап вает массив типа NodeList в переменную cBooks. В случае нашего д мента XML в диалоговом окне будет отображено четыре элемента ok />. Чтобы извлечь все дочерние элементы документа, необхо в качестве аргумента передать методу getElementsByTagName() строку
var cElements = oRoot.getElementsByTagName("*");
Наш документ XML содержит только элементы , поэтому зультат работы этого фрагмента будет совпадать с результатом ра' предыдущего фрагмента кода.