Учебник по XML

XML ГЛАВНАЯ Введение в XML XML Как использовать XML-дерево Синтаксис XML XML-элементы XML-атрибуты Пространства имен XML Отображение XML XML HttpRequest XML-парсер XML DOM XML XPath XML XSLT XML XQuery XML-ссылка XML-валидатор XML-DTD XML-схема XML-сервер XML-примеры XML-викторина XML-сертификат

XML АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

XML DOM

Введение в ДОМ DOM-узлы Доступ к DOM Информация об узле DOM Список узлов DOM Обход DOM DOM-навигация DOM Получить значения Узлы изменения DOM DOM Удалить узлы DOM заменить узлы DOM Создание узлов DOM Добавить узлы Узлы клонирования DOM Примеры DOM

Учебник XPath

XPath Введение Узлы XPath Синтаксис XPath Оси XPath Операторы XPath Примеры XPath

XSLT- учебник

Введение в XSLT Языки XSL XSLT-преобразование XSLT <шаблон> XSLT <значение> XSLT <для каждого> XSLT <сортировка> XSLT <если> XSLT <выбрать> XSLT Применить XSLT на клиенте XSLT на сервере XSLT Редактировать XML XSLT-примеры

Учебник по XQuery

Введение в XQuery Пример XQuery XQuery FLWOR XQuery HTML Условия XQuery Синтаксис XQuery XQuery Добавить Выбор XQuery Функции XQuery

XML -DTD

Введение в DTD Строительные блоки DTD Элементы DTD Атрибуты DTD Элементы DTD и Attr Сущности DTD Примеры DTD

XSD- схема

Введение в XSD XSD Как XSD <схема> XSD-элементы XSD-атрибуты XSD-ограничения

Комплекс XSD

XSD-элементы XSD пустой Только элементы XSD Только текст XSD XSD смешанный XSD-индикаторы XSD <любой> XSD <любой атрибут> Замена XSD Пример XSD

XSD- данные

XSD-строка XSD-дата XSD числовой XSD Разное Справочник по XSD

Веб- сервисы

XML-сервисы XML WSDL XML-МЫЛО XML RDF XML RSS

использованная литература

Типы узлов DOM DOM-узел Список узлов DOM DOM NamedNodeMap Документ DOM DOM-элемент Атрибут DOM DOM-текст ДОМ CDATA Дом Комментарий DOM XMLHttpRequest Парсер DOM XSLT-элементы Функции XSLT/XPath

Дерево узлов обхода XML DOM


Обход означает обход или перемещение по дереву узлов.


Обход дерева узлов

Часто вы хотите зациклить XML-документ, например: когда вы хотите извлечь значение каждого элемента.

Это называется «Обход дерева узлов».

Пример ниже перебирает все дочерние узлы <book> и отображает их имена и значения:

Пример

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

Вывод:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005

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

  1. Загрузите строку XML в xmlDoc
  2. Получить дочерние узлы корневого элемента
  3. Для каждого дочернего узла выведите имя узла и значение узла текстового узла.


Различия браузеров в парсинге DOM

Все современные браузеры поддерживают спецификацию W3C DOM.

Однако между браузерами есть некоторые различия. Одно важное отличие:

  • То, как они обрабатывают пробелы и новые строки

DOM — пробелы и новые строки

XML часто содержит символы новой строки или пробелы между узлами. Это часто бывает, когда документ редактируется простым редактором, например Блокнотом.

Следующий пример (отредактированный Блокнотом) содержит CR/LF (новая строка) между каждой строкой и двумя пробелами перед каждым дочерним узлом:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 и более ранние версии НЕ обрабатывают пустые пробелы или новые строки как текстовые узлы, в отличие от других браузеров.

В следующем примере выводится количество дочерних узлов, которые имеет корневой элемент ( books.xml ). IE9 и более ранние версии будут выводить 4 дочерних узла, тогда как IE10 и более поздние версии, а также другие браузеры будут выводить 9 дочерних узлов:

Пример

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}

PCDATA — проанализированные символьные данные

Синтаксические анализаторы XML обычно анализируют весь текст в XML-документе.

При анализе элемента XML также анализируется текст между тегами XML:

<message>This text is also parsed</message>

Синтаксический анализатор делает это, потому что элементы XML могут содержать другие элементы, как в этом примере, где элемент <name> содержит два других элемента (первый и последний):

<name><first>Bill</first><last>Gates</last></name>

и синтаксический анализатор разобьёт его на подэлементы следующим образом:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

Проанализированные символьные данные (PCDATA) — это термин, используемый для текстовых данных, которые будут проанализированы синтаксическим анализатором XML.


CDATA - (необработанные) символьные данные

Термин CDATA используется для текстовых данных, которые не должны анализироваться синтаксическим анализатором XML.

Такие символы, как "<" и "&", недопустимы в элементах XML.

"<" вызовет ошибку, поскольку синтаксический анализатор интерпретирует его как начало нового элемента.

"&" вызовет ошибку, потому что синтаксический анализатор интерпретирует его как начало символьной сущности.

Некоторый текст, например код JavaScript, содержит много символов «<» или «&». Во избежание ошибок код скрипта можно определить как CDATA.

Все, что находится внутри раздела CDATA, анализатор игнорирует.

Раздел CDATA начинается с " <![CDATA[ " и заканчивается " ]]> ":

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

В приведенном выше примере все содержимое раздела CDATA игнорируется синтаксическим анализатором.

Примечания к разделам CDATA:

Раздел CDATA не может содержать строку "]]>". Вложенные разделы CDATA не допускаются.

Символ «]]>», обозначающий конец раздела CDATA, не может содержать пробелов или разрывов строк.