Спонсор: Microsoft
Опубликован: 04.02.2009 | Уровень: специалист | Доступ: платный | ВУЗ: Воронежский государственный университет
Самостоятельная работа 12:

Программная обработка XML документов с помощью XML DOM

< Лекция 11 || Самостоятельная работа 12: 123 || Самостоятельная работа 13 >

Перемещение между узлами дерева

В XML DOM отношения между узлами определены в виде следующих свойств узлов:

  • parentNode
  • childNodes
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

Характер отношений между узлами представлен на следующем рисунке:


Игнорирование пустых текстовых узлов

Firefox и некоторые другие браузеры воспринимают неотображаемые символы как текстовые узлы (в отличие от Internet Explorer). Такая ситуация приводит к проблемам при использовании свойств firstChild, lastChild, nextSibling, previousSibling. Для того, чтобы игнорировать такие пустые текстовые узлы можно использовать следующий прием:

function get_nextSibling(n)
{
y = n.nextSibling;
while (y.nodeType!=1)
  {
  y = y.nextSibling;
  }
return y;
}

Поскольку узлы элементов имеют тип 1, то в том случае, когда узел-потомок не является узлом элемента, будет происходить перемещение к следующему узлу до тех пор, пока не будет найден узел элемента.

Изменение значения атрибута

Узлы атрибутов могут принимать текстовые значения. Изменение этого значения реализуется либо через метод setAttribute(), либо через свойство узла атрибута nodeValue

Метод setAttribute() изменяет значение существующего атрибута или создает новый атрибут.

Например:

xmlDoc = loadXMLDoc("timetable.xml");
x = xmlDoc.getElementsByTagName('lesson');
x[0].setAttribute("type","lab");

Свойство nodeValue можно использовать для изменения значения атрибута узла:

xmlDoc = loadXMLDoc("timetable.xml");
x = xmlDoc.getElementsByTagName("lesson")[0];
y = x.getAttributeNode("type");
y.nodeValue = "lab";

Удаление узла из дерева реализуется с помощью метода removeChild():

xmlDoc=loadXMLDoc("timetable.xml ");
y=xmlDoc.getElementsByTagName("lesson")[0];
xmlDoc.documentElement.removeChild(y);

Свойства объекта Node

IE: Internet Explorer, F: Firefox, O: Opera, W3C: (Стандарт)

Свойство Описание IE F O W3C
Версия
baseURI Возвращает абсолютный URI узла Нет 1 Нет Да
childNodes Возвращает свойство NodeList (список доч.узлов) 5 1 9 Да
firstChild Возвращает первый дочерний узел 5 1 9 Да
lastChild Возвращает последний дочерний узел 5 1 9 Да
localName Возвращает локальную часть имени узла Нет 1 9 Да
namespaceURI Возвращает URI узла в пространстве имен Нет 1 9 Да
nextSibling Возвращает следующий дочерний узел 5 1 9 Да
nodeName Возвращает имя узла в зависимости от типа 5 1 9 Да
nodeType Возвращает тип узла 5 1 9 Да
nodeValue Устанавливает или возвращает значение узла в зависимости от типа 5 1 9 Да
ownerDocument Возвращает корневой элемент (объект document ) для узла 5 1 9 Да
parentNode Возвращает родительский узел 5 1 9 Да
prefix Устанавливает или возвращает префикс пространства имен узла Нет 1 9 Да
previousSibling Возвращает непосредственно предшествующий узел 5 1 9 Да
textContent Устанавливает или возвращает текстовое содержимое узла Нет 1 Нет Да
xml Возвращает XML код узла 5 Нет Нет Нет

Методы объекта Node

Метод Описание IE F O W3C
appendChild() Добавить новый узел в конец списка дочерних узлов 5 1 9 Да
cloneNode() Клонирование узла 5 1 9 Да
compareDocumentPosition() Сравнение позиций двух узлов Нет 1 Нет Да
getFeature(feature,version) Возвращает объект DOM, реализующий специализированный API Нет Да
getUserData(key) Возвращает объект, ассоциирующийся с ключем текущего узла. Перед этим объект должен быть ассоциирован с текущим узлом путем вызова setUserData с тем же ключем Нет Да
hasAttributes() Возвращает истинное значение, если узел имеет атрибуты Нет 1 9 Да
hasChildNodes() Возвращает истинное значение, если узел имеет дочерние узлы 5 1 9 Да
insertBefore() Вставляет новый узел перед существующим узлом 5 1 9 Да
isDefaultNamespace(URI) Определяет, является ли указанный namespaceURI значением по умолчанию Нет Да
isEqualNode() Проверяет равенство двух узлов Нет Нет Нет Да
isSameNode() Проверяет идентичность двух уздов Нет 1 Нет Да
isSupported(feature,version) Определяет поддерживается ли указанная характеристика узлом 9 Да
removeChild() Удаляет дочерний узел 5 1 9 Да
replaceChild() Заменяет дочерний узел 5 1 9 Да
setUserData(key,data,handler) Ассоциирует объект с ключем в узле Нет Да
< Лекция 11 || Самостоятельная работа 12: 123 || Самостоятельная работа 13 >
Михаил Олифиренко
Михаил Олифиренко
Александр Табачук
Александр Табачук

Это только у меня не работает кнопочка "Получить код DreamSpark"? Пишет "временно не доступно..." А когда заработает?

Илья Гончаров
Илья Гончаров
Россия, Воронеж, Воронежский государственный университет, 2004
Андрей Галушко
Андрей Галушко
Украина, Конотоп, КИПТ