Предположим, нам нужно полностью обойти и показать всю иерархическую структуру узлов HTML-документа.
Для решения этой задачи добавим команду ПоказатьСтруктуруHTML. Обработчик команды заполним следующим образом (листинг 6.101).
Листинг 6.101. Обработчик команды «ПоказатьСтруктуруHTML»
&НаКлиенте
Процедура ПоказатьСтруктуруHTML(Команда)
ДокументHTML = ПолучитьДокументHTML(Текст_HTML);
Сообщение = Новый СообщениеПользователю();
ТекстСообщения = "";
ИтераторДерева = ДокументHTML.СоздатьОбходДерева(ДокументHTML.ЭлементДокумента);
Пока ИтераторДерева.СледующийУзел() <> Неопределено Цикл
Узел = ИтераторДерева.ТекущийУзел;
ТекстСообщения = ТекстСообщения + "Имя узла: " + Узел.ИмяУзла + Символы.ПС;
Если НЕ ПустаяСтрока(Узел.ЗначениеУзла) Тогда
ТекстСообщения = ТекстСообщения + "Значение узла: " + Узел.ЗначениеУзла + Символы.ПС;
КонецЕсли;
КонецЦикла;
Сообщение.Текст = ТекстСообщения;
Сообщение.Сообщить();
КонецПроцедуры
В этом обработчике сначала мы получаем объект ДокументHTML с помощью функции ПолучитьДокументHTML(), в которую передаем текст HTML-документа, содержащийся в реквизите Текст_HTML. Эта функция была рассмотрена выше, в листинге 6.98.
Затем методом СоздатьОбходДерева() объекта ДокументHTML мы создаем иерархический итератор типа ОбходДереваDOM для обхода структуры дерева HTML-документа. В качестве стартового узла итератора передаем в этот метод корневой узел HTML-документа (ДокументHTML.ЭлементДокумента).
Методом итератора СледующийУзел() мы перебираем узлы HTML-документа в цикле. Используя свойство итератора ТекущийУзел, на каждом шаге цикла получаем текущий узел, на котором спозиционирован итератор, и выводим имя и значение узла в сообщение пользователю. В теле цикла можно проанализировать тип узла и исходя из этого проводить дальнейшую обработку его значений.
Таким образом, после загрузки HTML-документа из файла (кнопка Прочитать HTML из файла) и нажатия кнопки Показать структуру HTML будет показано следующее окно сообщений пользователю (рис. 6.18).
Рис. 6.18. Элементы структуры дерева HTML-документа