ЧтениеHTML

Типы · HTMLReader

Предназначен для последовательного чтения HTML данных из файла или строки. Автоматически обрабатывает объявление HTML-документа и распознает тип кодировки файла. Объект должен использоваться в паре с ПостроительDOM.

Примеры платформы

ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку("<html><head><title>Тест</title></head><body><a href='http://www.example.com'>Example Domain</a></html>");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
Полное описание, параметры и ограничения

ЧтениеHTML (HTMLReader)

ЧтениеHTML (HTMLReader)

Доступен, начиная с версии 8.2.

Методы:
Закрыть (Close)
ОткрытьПоток (OpenStream)
ОткрытьФайл (OpenFile)
УстановитьСтроку (SetString)

Конструкторы:
По умолчанию

Описание:

Предназначен для последовательного чтения HTML данных из файла или строки. Автоматически обрабатывает объявление HTML-документа и распознает тип кодировки файла.
Объект должен использоваться в паре с ПостроительDOM.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку("<html><head><title>Тест</title></head><body><a href='http://www.example.com'>Example Domain</a></html>");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);

См. также:
Глобальный контекст, метод ПрочитатьXML
Глобальный контекст, метод ВозможностьЧтенияXML
ЧтениеСообщенияОбмена, метод НачатьЧтение
Глобальный контекст, метод ПолучитьXMLТип
СериализаторXDTO, метод ВозможностьЧтенияXML
СериализаторXDTO, метод ПолучитьXMLТип
СериализаторXDTO, метод ПрочитатьXML
ФабрикаXDTO, метод ПрочитатьXML
ПостроительDOM, метод Прочитать
ПостроительDOM, метод ПрочитатьВКонтексте
СписокПолнотекстовогоПоиска, метод ПолучитьОтображение

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Настроить локальный якорь и проверить его назначение

Ссылка ведёт только на собственный id note. Остальные свойства описывают ссылку, а не выполняют переход.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

HTML = "<html><head><title>Учебный заказ</title><meta id='meta' name='description' content='Вымышленный заказ'></head>
|<body id='body'><p id='note'>Заказ существует только в памяти</p><pre id='code'>A-01: 3
|B-02: 1</pre>
|<form id='order' name='order' action='' method='get'>
|<input id='customer' name='customer' type='text' value='Учебный покупатель'>
|<input id='accepted' name='accepted' type='checkbox' value='yes'>
|<button id='preview' name='preview' type='button' value='preview'>Предпросмотр</button></form>
|<table id='items' summary='Книга и ручка'><caption id='caption'>Товары</caption><colgroup><col id='column'></colgroup><tbody>
|<tr id='book'><td id='book-name'>Книга</td><td>3</td></tr><tr id='pen'><td>Ручка</td><td>1</td></tr>
|</tbody></table><a id='help' name='help' href='#note'>Пояснение</a><img id='logo' alt='Учебная картинка без источника'>
|</body></html>";
Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(HTML);
Попытка
    Построитель = Новый ПостроительDOM;
    Документ = Построитель.Прочитать(Чтение);
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
    ВызватьИсключение "Ожидался ДокументHTML, а не XML-документ";
КонецЕсли;
Якорь = Документ.ПолучитьЭлементПоИдентификатору("help");
Если Якорь = Неопределено Тогда
    ВызватьИсключение "Не найден учебный элемент help";
КонецЕсли;
Если ТипЗнч(Якорь) <> Тип("ЭлементЯкорьHTML") Тогда
    ВызватьИсключение "Неожиданный тип учебного элемента help";
КонецЕсли;
Якорь.Гиперссылка = "#note";
Якорь.Имя = "help";
Якорь.Цель = "_self";
Якорь.БазовыйЯзык = "ru";
Якорь.НаборСимволов = "utf-8";
Якорь.КлавишаДоступа = "h";
Якорь.ПорядокОбхода = "1";
Якорь.Тип = "text/html";
Якорь.Отношение = "help";
Якорь.ОбратнаяСсылка = "";
Якорь.Очертание = "rect";
Якорь.Координаты = "";
Сообщить(Якорь.Гиперссылка = "#note");
Сообщить(Документ.ПолучитьЭлементПоИдентификатору("note") <> Неопределено);
Сообщить(Якорь.ПорядокОбхода = "1");
Сообщить(Документ.Якоря.Количество() = 1);

Разбор по шагам

  1. Фрагмент #note относится к элементу в том же документе, не к внешнему серверу.

  2. По справке ПорядокОбхода якоря — Строка, поэтому передаём "1".

  3. Проверяем наличие адресуемого элемента; свойства отношения и языка не являются HTTP-ответом.

Как проверить результат

  1. Четыре проверки Истина: локальный href, существующий note, строковый порядок и один якорь.

  2. Ни браузер, ни HTTPСоединение в коде не создаются.

Ожидаемый результат

Подготовлена описанная локальная ссылка без перехода по ней.

На что обратить внимание

  1. ЭлементЯкорьHTML — не Гиперссылка поля формы и не Ссылка справочника 1С.

  2. Синтаксически заданный href ещё не доказывает допустимость или безопасность внешнего URL.

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

Настроить цвета ссылок тела HTML отдельно от интерфейса 1С

Тело документа хранит старые HTML-настройки цветов. Изменяем только собственный документ и не включаем фоновую картинку.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

HTML = "<html><head><title>Учебный заказ</title><meta id='meta' name='description' content='Вымышленный заказ'></head>
|<body id='body'><p id='note'>Заказ существует только в памяти</p><pre id='code'>A-01: 3
|B-02: 1</pre>
|<form id='order' name='order' action='' method='get'>
|<input id='customer' name='customer' type='text' value='Учебный покупатель'>
|<input id='accepted' name='accepted' type='checkbox' value='yes'>
|<button id='preview' name='preview' type='button' value='preview'>Предпросмотр</button></form>
|<table id='items' summary='Книга и ручка'><caption id='caption'>Товары</caption><colgroup><col id='column'></colgroup><tbody>
|<tr id='book'><td id='book-name'>Книга</td><td>3</td></tr><tr id='pen'><td>Ручка</td><td>1</td></tr>
|</tbody></table><a id='help' name='help' href='#note'>Пояснение</a><img id='logo' alt='Учебная картинка без источника'>
|</body></html>";
Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(HTML);
Попытка
    Построитель = Новый ПостроительDOM;
    Документ = Построитель.Прочитать(Чтение);
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
    ВызватьИсключение "Ожидался ДокументHTML, а не XML-документ";
КонецЕсли;
Тело = Документ.Тело;
Если Тело = Неопределено Тогда
    ВызватьИсключение "В собственной HTML-строке не найдено тело";
КонецЕсли;
Тело.ЦветФона = "#ffffff";
Тело.ЦветТекста = "#17212b";
Тело.Связь = "#245dcc";
Тело.АктивнаяСсылка = "#a53024";
Тело.ПосещеннаяСсылка = "#654291";
Тело.Фон = "";
Сообщить(Тело.Фон = "");
Сообщить(Тело.ЦветТекста = "#17212b");
Сообщить(Тело.Связь = "#245dcc");
Сообщить(Документ.Формы.Количество() = 1);

Разбор по шагам

  1. Получаем Тело из документа, а не выдумываем наличие у него полного общего DOM-интерфейса.

  2. Связь, АктивнаяСсылка и ПосещеннаяСсылка отвечают за разные состояния ссылок.

  3. Фон — ссылка на фоновый ресурс; оставляем пустым, чтобы урок не зависел от картинок.

Как проверить результат

  1. Четыре проверки Истина: пустой фон, два выбранных цвета и неизменная одна форма.

  2. Цвета кнопок и полей управляемой формы 1С не должны измениться.

Ожидаемый результат

Настройки тела изменены отдельно от данных заказа и интерфейса платформы.

На что обратить внимание

  1. Это не Цвет или Стиль управляемой формы 1С.

  2. Справка ЭлементТелоHTML содержит свойства тела, но не перечисляет общие методы узла; не переносите их сюда по аналогии.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.