локализация узлов XML DOM

узел можно определить с помощью отношений между узлами.

Пример

Ниже приведен пример с файлом XML books.xml.

Функция loadXMLDoc()находящегося во внешнем JavaScript, для загрузки файла XML.

Получение родительского узла узла
В этом примере используется свойство parentNode для получения родительского узла узла.
Получение первого подузла узла
В этом примере используется метод firstChild() и пользовательская функция для получения первого подузла узла.

Навигация по DOM узлам

Доступ к узлам в дереве узлов через отношения между ними, обычно называется навигацией по узлам ("navigating nodes").

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

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

Ниже приведено изображение: books.xml Часть дерева узлов, которая объясняет отношения между узлами:

дерево узлов DOM

DOM - родительский узел

Все узлы имеют только одного родительского узла. Следующий код определяет родительский узел <book>:

xmlDoc=loadXMLDoc("books.xml");
x = xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

Объяснение примера:

  • Используя loadXMLDoc() Ввести "books.xml"загружается в xmlDoc"
  • Получение первого элемента <book>
  • Вывод имени узла родителя узла "x"

TIY

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

Firefox и некоторые другие браузеры считают пустые пробелы и символы перевода строки текстовыми узлами, в то время как IE этого не делает.

Эта проблема возникает при использовании следующих свойств: firstChild, lastChild, nextSibling, previousSibling.

Чтобы избежать определения пустого текстового узла (пробелы и символы перевода строки между элементами), мы используем функцию для проверки типа узла:

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

С помощью上面的 функции мы можем использовать get_nextSibling(node) вместо свойства node.nextSibling.

Интерпретация кода:

Тип элемента узла равен 1. Если родительский узел не является элементом, перейдите к следующему узлу, пока не найдете элемент. Таким образом, в IE и Firefox можно получить одинаковый результат.

Получение первого элемента

Ниже приведен код, который показывает первый элемент узел <book>:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//проверка, является ли первый узел узлом элемента
функция get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

Вывод:

title

Объяснение примера:

  • Используя loadXMLDoc() Ввести "books.xml"Загрузить в xmlDoc"
  • Используйте функцию get_firstChild на первом <book>, чтобы получить первый подузел элементного узла
  • Вывод имени узла первого подузла (элементного узла)

TIY

Пример

Ниже приведен пример с аналогичными функциями:

  • firstChild: TIY
  • lastChild: TIY
  • nextSibling: TIY
  • previousSibling: TIY