ЧтениеXML.Прочитать

Методы · Read

Считывает очередной узел XML. При этом свойствам ЧтениеXML.ТипУзла, ЧтениеXML.Имя, ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Префикс, ЧтениеXML.URIПространстваИмен и ЧтениеXML.Значение присваиваются значения, соответствующие прочитанным данным.

Синтаксис

Прочитать()

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

Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
КонецЦикла;
Полное описание, параметры и ограничения

ЧтениеXML.Прочитать (XMLReader.Read)

ЧтениеXML (XMLReader)

Прочитать (Read)

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

Синтаксис:
Прочитать()
Возвращаемое значение:
Тип: Булево.
Истина - очередной узел прочитан; Ложь - текст XML завершился.
Описание:

Считывает очередной узел XML. При этом свойствам ЧтениеXML.ТипУзла, ЧтениеXML.Имя, ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Префикс, ЧтениеXML.URIПространстваИмен и ЧтениеXML.Значение присваиваются значения, соответствующие прочитанным данным.

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

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

Пример:

Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
// Обработка узла XML

КонецЦикла;

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

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

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

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

Перекодировать свой XML в Fast Infoset и вернуть обычный XML

ЗаписатьТекущий переносит текущий узел reader, не продвигая reader. Внешние файлы, неизвестные DTD и реальные ссылки не используются.

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

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

Подготовка

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

  2. Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.

  3. Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.

  4. Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.

XMLИсточника = "<products><product code=""A-01"">Книга</product><product code=""B-02"">Ручка</product></products>";
ИсходноеЧтение = Новый ЧтениеXML;
ИсходноеЧтение.УстановитьСтроку(XMLИсточника);
Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
    Пока ИсходноеЧтение.Прочитать() Цикл
        Запись.ЗаписатьТекущий(ИсходноеЧтение);
    КонецЦикла;
    Данные = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ИсходноеЧтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
ИсходноеЧтение.Закрыть();
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
    ВызватьИсключение "Не получен собственный двоичный XML";
КонецЕсли;
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
ТекстоваяЗапись = Новый ЗаписьXML;
ТекстоваяЗапись.УстановитьСтроку();
Попытка
    Пока Чтение.Прочитать() Цикл
        ТекстоваяЗапись.ЗаписатьТекущий(Чтение);
    КонецЦикла;
    XMLРезультата = ТекстоваяЗапись.Закрыть();
Исключение
    ТекстоваяЗапись.Закрыть();
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Сообщить(Данные.Размер() > 0);
Сообщить(СтрНайти(XMLРезультата, "Книга") > 0);
Сообщить(СтрНайти(XMLРезультата, "Ручка") > 0);
Сообщить(XMLРезультата);

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

  1. Первый reader разбирает собственную XML-строку; writer пишет его текущие узлы в бинарное представление.

  2. В каждом цикле Прочитать вызывается ровно один раз условием цикла, ЗаписатьТекущий сам не перемещает источник.

  3. Для обратного шага используем ЧтениеFastInfoset и обычный ЗаписьXML с приёмником-строкой.

  4. Каждый reader/writer закрывается на успешном и ошибочном пути; проверяем сохранение собственных кириллических подписей.

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

  1. Три сравнения Истина: непустые байты и две подписи в восстановленном XML.

  2. Выводится обычный текст XML с двумя товарами. Пробелы, декларацию и стиль кавычек не считаем побайтовым эталоном.

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

Выполнен учебный мост между текстовым и двоичным представлением XML.

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

  1. Не используйте преобразование произвольных бинарных байтов в строку вместо правильного reader.

  2. Проверка подстрок в уроке не является полной валидацией внешнего XML: реальный контракт требует проверки элементов, атрибутов и допустимых значений.

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

Получить HTML и XML выдачи, не исполняя её как код

ПолучитьОтображение возвращает либо строку HTML, либо объект ЧтениеXML в зависимости от значения перечисления. XML-чтение закрывается.

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

Полный серверный общий модуль УчебныйПолнотекстовыйПоиск своей отдельной учебной базы.

Подготовка

  1. Используйте только отдельную собственную конфигурацию УчебнаяКонфигурацияСинтаксиса с собственным справочником УчебныеТовары. Включите использование полнотекстового поиска у справочника и Наименование в своей учебной конфигурации.

  2. Вручную создайте ровно три товара: Учебномаяк Книга, Учебномаяк Ручка, Учебномаяк Коробка. Код урока не создаёт и не записывает эти товары. Маркер Учебномаяк нужен, чтобы не искать реальные сведения.

  3. Создайте серверный общий модуль УчебныйПолнотекстовыйПоиск с флагом Сервер, вставьте весь модуль выбранного урока. Из серверного обработчика своей учебной обработки вызовите УчебныйПолнотекстовыйПоиск.ВыполнитьПример().

  4. Сначала вручную разрешите поиск и обновите индекс своей учебной базы либо используйте отдельный урок обновления. Для опытов поиска индекс должен быть актуален, пользователь должен иметь чтение всех трёх собственных товаров.

  5. Для административных уроков нужен единственный пользователь УчебныйПользовательСинтаксиса, право Администрирование, монопольный сеанс без разделителей данных. В этих уроках используется только Версия1; Версия2 требует отдельной подготовки поискового сервера.

  6. Первый запуск административного урока делайте с пустым подтверждением. Не используйте рабочую базу или копию с реальными данными. Обслуживание меняет индекс/настройки и может занимать время, но не должно подменяться удалением товаров.

Процедура ВыполнитьПример() Экспорт
    Если НЕ ПолнотекстовыйПоиск.ИндексАктуален() Тогда
        ВызватьИсключение "Сначала обновите индекс своей отдельной учебной базы";
    КонецЕсли;
    Список = ПолнотекстовыйПоиск.СоздатьСписок("учебномаяк", 2);
    Область = Новый Массив;
    Область.Добавить(Метаданные.Справочники.УчебныеТовары);
    Список.ОбластьПоиска = Область;
    Список.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать;
    Список.ОграничиватьСтрокуПоиска = Истина;
    Список.ПолучатьПредставление = Истина;
    Список.ПолучатьОписание = Истина;
    Список.ПорогНечеткости = 0;
    Список.ПерваяЧасть();
    HTML = Список.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
    Сообщить(ТипЗнч(HTML) = Тип("Строка"));
    Сообщить("Символов HTML: " + Строка(СтрДлина(HTML)));
    Чтение = Список.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.XML);
    Если ТипЗнч(Чтение) <> Тип("ЧтениеXML") Тогда
        ВызватьИсключение "Ожидался документированный объект XML-чтения";
    КонецЕсли;
    КоличествоУзлов = 0;
    Попытка
        Пока Чтение.Прочитать() Цикл
            КоличествоУзлов = КоличествоУзлов + 1;
        КонецЦикла;
    Исключение
        ОшибкаЧтения = ОписаниеОшибки();
        Попытка
            Чтение.Закрыть();
        Исключение
            ВызватьИсключение ОшибкаЧтения + Символы.ПС + "Закрытие XML: " + ОписаниеОшибки();
        КонецПопытки;
        ВызватьИсключение ОшибкаЧтения;
    КонецПопытки;
    Чтение.Закрыть();
    Сообщить(КоличествоУзлов > 0);
    Сообщить("Чтение XML завершено и закрыто; HTML не исполнялся");
КонецПроцедуры

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

  1. Настроить и выполнить первую порцию собственного поиска.

  2. Запросить HTMLТекст: это строка разметки с подсветкой найденных слов. Проверить тип и вывести только её длину.

  3. Запросить XML: это уже открытый ЧтениеXML. Обойти реальные узлы без предположений об именах элементов.

  4. Закрыть XML и при успехе, и при ошибке. Если закрытие тоже не удалось, сохранить описание обеих ошибок.

  5. Не вставлять HTML в неизвестный веб-контекст и не выдавать количество XML-узлов за количество товаров.

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

  1. Проверка типа HTML и наличия XML-узлов Истина. Длины и число узлов выводятся фактически.

  2. Количество узлов не обязано равняться 2 или 3, потому что XML содержит служебную структуру и свойства.

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

Показаны два разных формата представления и корректное владение XML-ресурсом.

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

  1. XML-объект — не строка для УстановитьСтроку: он уже получен от платформы.

  2. HTML-подсветка является оформлением выдачи, не сохранением найденных объектов.

  3. Урок не сохраняет файлы, не открывает внешние адреса и не выполняет скрипты.

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

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

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

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

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