Возвращает коллекцию элементов строк таблицы HTML-документа.
Синтаксис
ПолучитьСтроки()Полное описание, параметры и ограничения
ЭлементТаблицаHTML.ПолучитьСтроки (HTMLTableElement.GetRows)
ЭлементТаблицаHTML (HTMLTableElement)
ПолучитьСтроки (GetRows)
Доступен, начиная с версии 8.2.
Синтаксис:
ПолучитьСтроки()
Возвращаемое значение:
Тип: КоллекцияЭлементовHTML.
Описание:
Возвращает коллекцию элементов строк таблицы HTML-документа.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Посчитать количество вымышленных товаров из HTML-таблицы
Читаем две строки и вторую ячейку каждой. Количество элементов HTML и числовое количество товаров — разные величины.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.
Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.
Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.
Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.
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-документ";
КонецЕсли;
Таблица = Документ.ПолучитьЭлементПоИдентификатору("items");
Если Таблица = Неопределено Тогда
ВызватьИсключение "Не найден учебный элемент items";
КонецЕсли;
Если ТипЗнч(Таблица) <> Тип("ЭлементТаблицаHTML") Тогда
ВызватьИсключение "Неожиданный тип учебного элемента items";
КонецЕсли;
Строки = Таблица.ПолучитьСтроки();
Итог = 0;
Для Индекс = 0 По Строки.Количество() - 1 Цикл
СтрокаТаблицы = Строки.Элемент(Индекс);
Если СтрокаТаблицы.Ячейки.Количество() <> 2 Тогда
ВызватьИсключение "В учебной строке ожидалось две ячейки";
КонецЕсли;
Название = СтрокаТаблицы.Ячейки.Элемент(0);
Количество = СтрокаТаблицы.Ячейки.Элемент(1);
Итог = Итог + Число(Количество.ТекстовоеСодержимое);
Сообщить(СтрШаблон("Строка %1, ячейка %2: %3",
СтрокаТаблицы.ИндексСтроки, Название.ИндексЯчейки, Название.ТекстовоеСодержимое));
КонецЦикла;
Сообщить(Строки.Количество() = 2);
Сообщить(Итог = 4);Разбор по шагам
ПолучитьСтроки возвращает коллекцию строк, не ТаблицаЗначений.
Индексы строк и ячеек нулевые; перед второй ячейкой проверяем схему.
Текст 3 и 1 преобразуем в числа только для контролируемой учебной строки.
Счётчик строк равен двум, итог количеств равен четырём.
Как проверить результат
Две последние проверки Истина: строки 2, количество 4.
Замените количество в собственной строке на нечисловой текст: ожидается ошибка преобразования, а не незаметная подстановка нуля.
Ожидаемый результат
Получен числовой итог из настоящего дерева собственной HTML-таблицы.
На что обратить внимание
Внешний HTML может содержать заголовки, объединённые ячейки и локализованные числа — этот фрагмент не универсальный парсер прайс-листов.
Сумма HTML-заказа не является остатком регистра 1С.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Объединение ячеек не удаляет соседние данные автоматически
Меняем colspan и rowspan на глубокой копии таблицы. Исходный заказ сохраняет две ячейки в строке и оба товара.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.
Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.
Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.
Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.
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-документ";
КонецЕсли;
Таблица = Документ.ПолучитьЭлементПоИдентификатору("items");
Если Таблица = Неопределено Тогда
ВызватьИсключение "Не найден учебный элемент items";
КонецЕсли;
Если ТипЗнч(Таблица) <> Тип("ЭлементТаблицаHTML") Тогда
ВызватьИсключение "Неожиданный тип учебного элемента items";
КонецЕсли;
Копия = Таблица.КлонироватьУзел(Истина);
Строки = Копия.ПолучитьСтроки();
Ячейка = Строки.Элемент(0).Ячейки.Элемент(0);
Если ТипЗнч(Ячейка) <> Тип("ЭлементЯчейкаТаблицыHTML") Тогда
ВызватьИсключение "Ожидалась ячейка собственной копии";
КонецЕсли;
Ячейка.ОбъединениеКолонок = 2;
Ячейка.ОбъединениеСтрок = 1;
Ячейка.Ось = "product";
Ячейка.Сокращение = "Товар";
Ячейка.Заголовки = "";
Ячейка.ОбластьВидимости = "";
Сообщить(Ячейка.ОбъединениеКолонок = 2);
Сообщить(Строки.Элемент(0).Ячейки.Количество() = 2);
Сообщить(Таблица.ПолучитьСтроки().Элемент(0).Ячейки.Количество() = 2);
Сообщить(Копия.РодительскийУзел = Неопределено);Разбор по шагам
Глубокое клонирование делает отдельное дерево, пока ещё не вставленное в документ.
ОбъединениеКолонок задаёт занимаемое место при отображении, не выполняет удаление следующего td.
Ось и Сокращение задают дополнительное описание; пустые Заголовки не ссылаются на несуществующий th.
Как проверить результат
Четыре проверки Истина: colspan 2, по две ячейки у копии и оригинала, копия не вставлена.
Такую промежуточную копию не используйте как готовую таблицу: сначала определите, куда перенести данные второй ячейки.
Ожидаемый результат
Понятно отличие визуального объединения от структурного изменения таблицы.
На что обратить внимание
Слепой colspan поверх заполненных соседних ячеек создаёт неправильную раскладку.
scope и headers имеют смысл при настоящих заголовочных ячейках; пример не выдаёт пустые значения за полную доступность.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.