Перейти к основному содержимому

ЧтениеXml

Стд::Xml::ЧтениеXml

Объект для последовательного чтения XML-данных. Чтение XML-данных выполняется потоково, в конкретный момент времени объект позиционируется на конкретном узле XML. При ошибке разбора XML-данных вызывается исключение ИсключениеЧтенияXml. Типы данных разбираются в соответствии со стандартом XML.

Сравнение ссылочное

Иерархия типа

Базовые типы: Объект


Примеры

Чтение XML

Исходная строка XML

<?xml version="1.0" encoding="UTF-8"?>
<ns:Товары xmlns:ns="urn::my.test.company">
<Заголовок>
<ИдВыгрузки>21fe9796-4735-4334-84fd-6d0b0b83b517</ИдВыгрузки>
<МоментВыгрузки>2023-10-17T11:48:22Z</МоментВыгрузки>
<ДанныеОтправителяXml><![CDATA[<Отправитель>Моя тестовая компания</Отправитель>]]></ДанныеОтправителяXml>
</Заголовок>
<Товар Ид="И100" Наименование="Коробка картонная" Группа="Упаковка">
<Производитель Наименование="ОКК" Страна="РФ" Штрихкод="1234567891234"/>
<!-- Необязательный элемент -->
<Характеристики>
<Характеристика Имя="Толщина картона" Значение="5мм"/>
<Характеристика Имя="Вес" Значение="300г"/>
</Характеристики>
</Товар>
<Товар Ид="И101" Наименование="Маркер" Группа="Канцтовары">
<Производитель Наименование="GlobalMarker"/>
<!-- Необязательный элемент -->
<Характеристики>
<Характеристика Имя="Цвет" Значение="красный"/>
</Характеристики>
</Товар>
<Товар Ид="И102" Наименование="Набор крючков" Группа="ТоварыДляРыбалки">
<Производитель Наименование="PNC" Страна="Палау" Штрихкод="2234567891234"/>
</Товар>
</ns:Товары>

Код чтения XML

// Структура для хранения сообщения Товары
структура СтруктураТовары
пер Заголовок: СтруктураЗаголовок
пер Товары: Множество<СтруктураТовар>
;

// Структура для хранения заголовка выгрузки
структура СтруктураЗаголовок
пер ИдВыгрузки: Ууид
пер МоментВыгрузки: Момент
пер ДанныеОтправителяXml: Строка
;

// Структура для хранения описания товара
// Для необязательных полей используется составной тип с Неопределено
структура СтруктураТовар
пер Ид: Строка
пер Наименование: Строка
пер Группа: Строка
пер Производитель: СтруктураПроизводитель
пер Характеристики: Соответствие<Строка, Строка>?
;

// Структура для хранения описания производителя товара
// Для необязательных полей используется составной тип с Неопределено
структура СтруктураПроизводитель
пер Наименование: Строка
пер Страна: Строка?
пер Штрихкод: Число?
;

метод ПрочитатьXmlТовары(СтрокаXml: Строка): СтруктураТовары
// Переменные структур и объектов хранения данных
пер Заголовок: СтруктураЗаголовок
пер Товары: Множество<СтруктураТовар>
пер Товар: СтруктураТовар

// Переменные хранения текущего контекста
пер ЭлементЗаголовок = Ложь
пер ЭлементТовар = Ложь

// Объект чтения строки XML
знч Чтение = новый ЧтениеXml(СтрокаXml)

пока Чтение.Следующий()
// Начало элемента
если Чтение.ВидУзла == ВидУзлаXml.НачалоЭлемента
// Начало элемента Заголовок
если Чтение.ЛокальноеИмя == "Заголовок"
ЭлементЗаголовок = Истина
продолжить
;

// Обработка дочерних элементов для элемента Заголовок
если ЭлементЗаголовок
ПрочитатьЗаголовок(Чтение, Заголовок)
продолжить
;

// Начало элемента Товар
если Чтение.ЛокальноеИмя == "Товар"
ЭлементТовар = Истина

// В конструктор структуры Товар передаются значения обязательных атрибутов в порядке их следования в объявлении структуры
Товар = новый СтруктураТовар(Чтение.ЗначениеАтрибута("Ид"), Чтение.ЗначениеАтрибута("Наименование"), Чтение.ЗначениеАтрибута("Группа"))
Товары.Добавить(Товар)
продолжить
;

// Обработка дочерних элементов для элемента Товар
если ЭлементТовар
ПрочитатьТовар(Чтение, Товар)
продолжить
;
;

// Конец элемента
если Чтение.ВидУзла == ВидУзлаXml.КонецЭлемента
// Конец элемента Заголовок
если Чтение.ЛокальноеИмя == "Заголовок"
ЭлементЗаголовок = Ложь
продолжить
;

// Конец элемента Товар
если Чтение.ЛокальноеИмя == "Товар"
ЭлементТовар = Ложь
продолжить
;
;
;

// Создание объекта с результатом чтения XML
возврат новый СтруктураТовары(Заголовок, Товары)
;

метод ПрочитатьЗаголовок(Чтение: ЧтениеXml, Заголовок: СтруктураЗаголовок)
// Начало элемента Заголовок/ИдВыгрузки
если Чтение.ЛокальноеИмя == "ИдВыгрузки"
// Если значение ИдВыгрузки отсутствует, заполняется новый идентификатор
Заголовок.ИдВыгрузки = Чтение.ЭтоПустойЭлемент() ? новый Ууид() : Чтение.ПрочитатьСодержимоеКакУуид()

// Начало элемента Заголовок/МоментВыгрузки
иначе если Чтение.ЛокальноеИмя == "МоментВыгрузки"
// Если значение МоментВыгрузки отсутствует, заполняется текущий момент
Заголовок.МоментВыгрузки = Чтение.ЭтоПустойЭлемент() ? Момент.Сейчас() : Чтение.ПрочитатьСодержимоеКакМомент()

// Начало элемента Заголовок/ДанныеОтправителяXml
иначе если Чтение.ЛокальноеИмя == "ДанныеОтправителяXml"
// Значение из секции CDATA
Заголовок.ДанныеОтправителяXml = Чтение.ПрочитатьСодержимоеКакСтроку()
;
;

метод ПрочитатьТовар(Чтение: ЧтениеXml, Товар: СтруктураТовар)
// Элемент Товар/Производитель
если Чтение.ЛокальноеИмя == "Производитель"
ПрочитатьТоварПроизводитель(Чтение, Товар)

// Элемент Товар/Характеристики
иначе если Чтение.ЛокальноеИмя == "Характеристики"
Товар.Характеристики = новый Соответствие<Строка, Строка>()

// Элемент Товар/Характеристики/Характеристика
иначе если Чтение.ЛокальноеИмя == "Характеристика" и Товар.Характеристики != Неопределено
Товар.Характеристики.Вставить(Чтение.ЗначениеАтрибута("Имя"), Чтение.ЗначениеАтрибута("Значение"))
;
;

метод ПрочитатьТоварПроизводитель(Чтение: ЧтениеXml, Товар: СтруктураТовар)
// В конструктор структуры Производитель передается значение обязательного атрибута Наименование
Товар.Производитель = новый СтруктураПроизводитель(Чтение.ЗначениеАтрибута("Наименование"))

// Атрибут Cтрана является необязательным, тип Строка
// В случае отсутствия метод вернет значение Неопределено
Товар.Производитель.Страна = Чтение.ЗначениеАтрибута("Страна")

// Атрибут Штрихкод является необязательным, тип Число
// В случае отсутствия метод вернет исключение, которое требуется поймать для продолжения обработки
Товар.Производитель.Штрихкод = Неопределено

попытка
Товар.Производитель.Штрихкод = Чтение.ЗначениеАтрибутаКакЧисло("Штрихкод")
поймать И: ИсключениеНедопустимыйАргумент
;
;

Результат со строковым представлением объекта после чтения XML

// {Заголовок={ИдВыгрузки=21fe9796-4735-4334-84fd-6d0b0b83b517, МоментВыгрузки=2023-10-17T11:48:22.000Z, ДанныеОтправителяXml=<Отправитель>Моя тестовая компания</Отправитель>},
// Товары={
// {Ид=И100, Наименование=Коробка картонная, Группа=Упаковка, Производитель={Наименование=ОКК, Страна=РФ, Штрихкод=1234567891234}, Характеристики={Толщина картона: 5мм, Вес: 300г}},
// {Ид=И101, Наименование=Маркер, Группа=Канцтовары, Производитель={Наименование=GlobalMarker, Страна=undefined, Штрихкод=undefined}, Характеристики={Цвет: красный}},
// {Ид=И102, Наименование=Набор крючков, Группа=ТоварыДляРыбалки, Производитель={Наименование=PNC, Страна=Палау, Штрихкод=2234567891234}, Характеристики=undefined}
// }
// }

Чтение значений атрибутов и элементов различных типов

Исходная строка XML

<?xml version="1.0" encoding="UTF-8"?>
<Типы>
<Атрибуты Строка="Строка" Байты="74657374" БайтыBase64="dGVzdA" Булево="true" Время="23:59:59.999"
Дата="2023-01-01" ДатаВремя="2023-01-01T23:59:59.999" Длительность="PT144H0.005S" Момент="2020-04-16T20:30:40.345Z"
Ууид="21fe9796-4735-4334-84fd-6d0b0b83b517" Число="123.45" />
<Элементы>
<Строка>Строка</Строка>
<Байты>74657374</Байты>
<БайтыBase64>dGVzdA</БайтыBase64>
<Булево>true</Булево>
<Время>23:59:59.999</Время>
<Дата>2023-01-01</Дата>
<ДатаВремя>2023-01-01T23:59:59.999</ДатаВремя>
<Длительность>PT144H0.005S</Длительность>
<Момент>2020-04-16T20:30:40.345Z</Момент>
<Ууид>21fe9796-4735-4334-84fd-6d0b0b83b517</Ууид>
<Число>123.45</Число>
</Элементы>
</Типы>

Код чтения XML

метод ПрочитатьXmlТипы(СтрокаXml: Строка)
знч Чтение = новый ЧтениеXml(СтрокаXml)
пока Чтение.Следующий()
если Чтение.ВидУзла == ВидУзлаXml.НачалоЭлемента
// Атрибуты
если Чтение.ЛокальноеИмя == "Атрибуты"
пер Строка = Чтение.ЗначениеАтрибута("Строка") // Строка
пер Байты = Чтение.ЗначениеАтрибутаКакБайты("Байты") // 74657374
пер БайтыBase64 = Чтение.ЗначениеАтрибутаКакБайтыBase64("БайтыBase64") // 74657374
пер Булево = Чтение.ЗначениеАтрибутаКакБулево("Булево") // Истина
пер Время = Чтение.ЗначениеАтрибутаКакВремя("Время") // 23:59:59.999
пер Дата = Чтение.ЗначениеАтрибутаКакДата("Дата") // 2023-01-01
пер ДатаВремя = Чтение.ЗначениеАтрибутаКакДатаВремя("ДатаВремя") // 2023-01-01T23:59:59.999
пер Длительность = Чтение.ЗначениеАтрибутаКакДлительность("Длительность") // 144:00:00.005
пер Момент = Чтение.ЗначениеАтрибутаКакМомент("Момент") // 2020-04-16T20:30:40.345Z
пер Ууид = Чтение.ЗначениеАтрибутаКакУуид("Ууид") // 21fe9796-4735-4334-84fd-6d0b0b83b517
пер Число = Чтение.ЗначениеАтрибутаКакЧисло("Число") // 123.45
;

// Элементы
если Чтение.ЛокальноеИмя == "Строка"
пер Строка = Чтение.ПрочитатьСодержимоеКакСтроку() // Строка
;
если Чтение.ЛокальноеИмя == "Байты"
пер Байты = Чтение.ПрочитатьСодержимоеКакБайты() // 74657374
;
если Чтение.ЛокальноеИмя == "БайтыBase64"
пер БайтыBase64 = Чтение.ПрочитатьСодержимоеКакБайтыBase64() // 74657374
;
если Чтение.ЛокальноеИмя == "Булево"
пер Булево = Чтение.ПрочитатьСодержимоеКакБулево() // Истина
;
если Чтение.ЛокальноеИмя == "Время"
пер Время = Чтение.ПрочитатьСодержимоеКакВремя() // 23:59:59.999
;
если Чтение.ЛокальноеИмя == "Дата"
пер Дата = Чтение.ПрочитатьСодержимоеКакДату() // 2023-01-01
;
если Чтение.ЛокальноеИмя == "ДатаВремя"
пер ДатаВремя = Чтение.ПрочитатьСодержимоеКакДатаВремя()// 2023-01-01T23:59:59.999
;
если Чтение.ЛокальноеИмя == "Длительность"
пер Длительность = Чтение.ПрочитатьСодержимоеКакДлительность() //144:00:00.005
;
если Чтение.ЛокальноеИмя == "Момент"
пер Момент = Чтение.ПрочитатьСодержимоеКакМомент() //2020-04-16T20:30:40.345Z
;
если Чтение.ЛокальноеИмя == "Ууид"
пер Ууид = Чтение.ПрочитатьСодержимоеКакУуид() // 21fe9796-4735-4334-84fd-6d0b0b83b517
;
если Чтение.ЛокальноеИмя == "Число"
пер Число = Чтение.ПрочитатьСодержимоеКакЧисло() // 123.45
;
;
;
;

См. также

ЗаписьXml


Конструкторы

ЧтениеXml

ЧтениеXml(
Источник: Строка,
Настройки: НастройкиЧтенияXml)
Перегрузка:
ЧтениеXml(Источник: ПотокЧтения, Настройки: НастройкиЧтенияXml, Кодировка: Кодировка|Строка = Кодировка.Utf8)

Конструктор чтения XML из строки Источник с настройками Настройки.


ЧтениеXml

ЧтениеXml(
Источник: ПотокЧтения,
Настройки: НастройкиЧтенияXml,
Кодировка: Кодировка|Строка = Кодировка.Utf8)
Перегрузка:
ЧтениеXml(Источник: Строка, Настройки: НастройкиЧтенияXml)

Конструктор чтения XML из потока Источник с настройками Настройки и кодировкой Кодировка.


Свойства

Автономный

ТолькоЧтение

Автономный: Булево

Значение атрибута standalone элемента объявления XML. Если атрибут не указан или объявление не прочитано (отсутствует), то Ложь.


ВерсияXml

ТолькоЧтение

ВерсияXml: Строка?

Версия спецификации XML, которой соответствует документ XML (получается из объявления XML).


ВидУзла

ТолькоЧтение

ВидУзла: ВидУзлаXml?

Вид текущего узла или Неопределено, если чтение еще не начато или уже завершено.


Значение

ТолькоЧтение

Значение: Строка

Текстовое значение текущего узла XML. Если для узла текстовое значение не определено, то содержит пустую строку. Узлы, для которых определено текстовое значение:

  • СекцияCDATA - содержимое секции CDATA,
  • Комментарий - содержимое комментария,
  • ОпределениеТипаДокумента - внутреннее подмножество (internal subset),
  • ИнструкцияОбработки - содержимое инструкции обработки, исключая адрес (target),
  • Текст - содержимое текстового узла,
  • СсылкаНаСущность - текст сущности.

Учитывается значение параметра ИгнорироватьПробелыВЗначениях. После окончания текста XML возвращает пустую строку.


ИмеетЗначение

ТолькоЧтение

ИмеетЗначение: Булево

Признак что текущий узел содержит текстовое значения. После окончания текста XML возвращает Ложь


ИмеетИмя

ТолькоЧтение

ИмеетИмя: Булево

Признак наличия у текущего узла имени. После окончания текста XML возвращает Ложь


Имя

ТолькоЧтение

Имя: Строка

Имя текущего узла XML. Содержит квалифицированное имя для текущего узла. Имя зависит от типа текущего узла:

  • ОпределениеТипаДокумента - имя типа документа,
  • НачалоЭлемента - имя элемента,
  • КонецЭлемента - имя элемента,
  • СсылкаНаСущность - имя ссылки на сущность,
  • ИнструкцияОбработки - адрес инструкции обработки (target).

Для узлов, у которых имя не определено, свойство содержит пустую строку. После окончания текста XML возвращает пустую строку.


ЛокальноеИмя

ТолькоЧтение

ЛокальноеИмя: Строка

Локальное имя текущего узла XML. Содержит неквалифицированное имя для текущего узла. После окончания текста XML возвращает пустую строку.


Префикс

ТолькоЧтение

Префикс: Строка

Префикс текущего узла. Имеет смысл для узлов типов НачалоЭлемента, КонецЭлемента. Для узлов остальных типов или после окончания текста XML возвращает пустую строку.


ПространствоИмен

ТолькоЧтение

ПространствоИмен: Строка

URI пространства имен текущего узла. После окончания текста XML возвращает пустую строку.


Методы

ЗначениеАтрибута

ЗначениеАтрибута(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Строка?
Возвращает строку, представляющую значение атрибута с именем Имя и пространством имен ПространствоИмен.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакБайты

ЗначениеАтрибутаКакБайты(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Байты
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен как шестнадцатеричное число и преобразует к значению типа Байты.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакБайтыBase64

ЗначениеАтрибутаКакБайтыBase64(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Байты
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен как число в записи Base64 и преобразует к значению типа Байты.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакБулево

ЗначениеАтрибутаКакБулево(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Булево
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Булево.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакВремя

ЗначениеАтрибутаКакВремя(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Время
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Время.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакДата

ЗначениеАтрибутаКакДата(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Дата
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Дата.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакДатаВремя

ЗначениеАтрибутаКакДатаВремя(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): ДатаВремя
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа ДатаВремя.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакДлительность

ЗначениеАтрибутаКакДлительность(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Длительность
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Длительность.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакМомент

ЗначениеАтрибутаКакМомент(
Имя: Строка,
ЧасовойПояс: ЧасовойПояс
): Момент
Перегрузка:
ЗначениеАтрибутаКакМомент(Имя: Строка, ПространствоИмен: Строка? = Неопределено, ЧасовойПояс: ЧасовойПояс): Момент

Читает значение атрибута с именем Имя преобразует к значению типа Момент часовом поясе ЧасовойПояс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакМомент

ЗначениеАтрибутаКакМомент(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено,
ЧасовойПояс: ЧасовойПояс
): Момент
Перегрузка:
ЗначениеАтрибутаКакМомент(Имя: Строка, ЧасовойПояс: ЧасовойПояс): Момент

Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Момент. Если у значения атрибута не указан часовой пояс, для преобразования будет использован часовой пояс, указанный в аргументе ЧасовойПояс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакУуид

ЗначениеАтрибутаКакУуид(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Ууид
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Ууид.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаКакЧисло

ЗначениеАтрибутаКакЧисло(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Число
Читает значение атрибута с именем Имя и пространством имен ПространствоИмен и преобразует к значению типа Число.

Исключения

ИсключениеНедопустимоеСостояние - если:


ЗначениеАтрибутаПоИндексу

ЗначениеАтрибутаПоИндексу(Индекс: Число): Строка
Возвращает строку, представляющую значение атрибута с указанным индексом Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ИмяАтрибута

ИмяАтрибута(Индекс: Число): Строка
Возвращает полное имя атрибута по индексу Индекс. Совпадает с локальным, если не задан префикс атрибута. Иначе - полное имя имеет вид: префикс_атрибута:локальное_имя_атрибута.

Исключения

ИсключениеНедопустимоеСостояние - если:


КоличествоАтрибутов

КоличествоАтрибутов(): Число
Возвращает количество атрибутов у последнего прочитанного узла XML.

Исключения

ИсключениеНедопустимоеСостояние - если:


КоличествоОбъявленийПространствИмен

КоличествоОбъявленийПространствИмен(): Число
Возвращает количество объявлений пространств имен у последнего прочитанного узла XML.

Исключения

ИсключениеЧтенияXml - если тип текущего узла не НачалоЭлемента

Примеры

<!-- http://xmlns - пространство имен по умолчанию,
http://ns - пространство имен "ns" -->
<tag xmlns="http://xmlns"
xmlns:ns="http://ns"
ns:attr="value"/>
метод ПолучитьКоличествоОбъявленийПространствИмен(СтрокаXml:Строка): Число
знч Чтение = новый ЧтениеXml(СтрокаXml)
Чтение.Следующий()

возврат Чтение.КоличествоОбъявленийПространствИмен() // 2
;

ЛокальноеИмяАтрибута

ЛокальноеИмяАтрибута(Индекс: Число): Строка
Возвращает локальное имя атрибута по индексу Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ОбъявлениеПространстваИмен

ОбъявлениеПространстваИмен(Индекс: Число): Строка
Возвращает URI объявления пространства имен с указанным индексом Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ПрефиксАтрибута

ПрефиксАтрибута(Индекс: Число): Строка
Возвращает префикс атрибута с указанным индексом Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ПрефиксОбъявленияПространстваИмен

ПрефиксОбъявленияПространстваИмен(Индекс: Число): Строка
Возвращает префикс объявления пространства имен с указанным индексом Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


Пропустить

Пропустить(): Булево
Пропускает дочерние узлы текущего узла и позиционируется в начало следующего узла. Если текущий узел не содержит подчиненных узлов или если его тип не НачалоЭлемента, то вызов метода аналогичен Следующий, в противном случае осуществляется пропуск всех дочерних узлов и осуществляется позиционирование на следующем узле. Возвращает Ложь, если текст XML завершился.

Исключения

ИсключениеЧтенияXml - если произошла ошибка при чтении XML


ПространствоИменАтрибута

ПространствоИменАтрибута(Индекс: Число): Строка
Возвращает пространство имен атрибута по индексу Индекс.

Исключения

ИсключениеНедопустимоеСостояние - если:


ПрочитатьСодержимоеКакБайты

ПрочитатьСодержимоеКакБайты(): Байты
Читает содержимое узла как шестнадцатеричное число и преобразует к значению типа Байты. При преобразовании не учитываются пробельные символы. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Байты

ПрочитатьСодержимоеКакБайтыBase64

ПрочитатьСодержимоеКакБайтыBase64(): Байты
Читает содержимое узла как число в записи Base64 и преобразует к значению типа Байты. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Байты

ПрочитатьСодержимоеКакБулево

ПрочитатьСодержимоеКакБулево(): Булево
Читает содержимое узла и преобразует к логическому значению:

  • значения true и 1 преобразуются в Истина,
  • значения false и 0 преобразуются в Ложь. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к логическому типу

ПрочитатьСодержимоеКакВремя

ПрочитатьСодержимоеКакВремя(): Время
Читает содержимое узла и преобразует к значению типа Время. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Время

ПрочитатьСодержимоеКакДатаВремя

ПрочитатьСодержимоеКакДатаВремя(): ДатаВремя
Читает содержимое узла и преобразует к значению типа ДатаВремя. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу ДатаВремя

ПрочитатьСодержимоеКакДату

ПрочитатьСодержимоеКакДату(): Дата
Читает содержимое узла и преобразует к значению типа Дата. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Дата

ПрочитатьСодержимоеКакДлительность

ПрочитатьСодержимоеКакДлительность(): Длительность
Читает содержимое узла и преобразует к значению типа Длительность. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Длительность

ПрочитатьСодержимоеКакМомент

ПрочитатьСодержимоеКакМомент(ЧасовойПояс: ЧасовойПояс): Момент
Читает содержимое узла и преобразует к значению типа Момент. Если у содержимого узла не указан часовой пояс, для преобразования будет использован часовой пояс, указанный в аргументе ЧасовойПояс. Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Момент

ПрочитатьСодержимоеКакСтроку

ПрочитатьСодержимоеКакСтроку(): Строка
Читает содержимое узла как строку.

После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:


ПрочитатьСодержимоеКакУуид

ПрочитатьСодержимоеКакУуид(): Ууид
Читает содержимое узла и преобразует к значению типа Ууид.

Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к типу Ууид

ПрочитатьСодержимоеКакЧисло

ПрочитатьСодержимоеКакЧисло(): Число
Читает содержимое узла и преобразует к числовому значению.

Перед преобразованием от значения отрезаются пробельные символы в начале и конце. После вызова метода выполнено позиционирование на соответствующем узле типа КонецЭлемента.

Исключения

ИсключениеЧтенияXml - если:

  • тип текущего узла не НачалоЭлемента
  • узел имеет вложенные узлы
  • значение не может быть преобразовано к числовому типу

Следующий

Следующий(): Булево
Считывает очередной узел XML. Возвращает признак, что был прочитан очередной узел (Ложь - текст XML завершился). При этом следующим свойствам присваиваются значения, соответствующие прочитанным данным:

Исключения

ИсключениеЧтенияXml - при ошибке чтения XML.


СледующийДо

СледующийДо(
Имя: Строка,
ПространствоИмен: Строка? = Неопределено
): Булево
Читает узлы до тех пор, пока не встретит узел с именем Имя в пространстве имен ПространствоИмен. Возвращает Истина, если текущий узел является искомым, иначе Ложь (текст XML завершился).


СледующийПоВыражениюXPath

СледующийПоВыражениюXPath(Выражение: ВыражениеXPathЧтенияXml): Булево
Читает узлы до тех пор, пока не встретит узел, соответствующий поиску по заданному выражению XPath. Возвращает Истина, если текущий узел является искомым, иначе Ложь (текст XML завершился).

Если после текущего вызова метода СледующийПоВыражениюXPath вызывались методы Следующий или СледующийДо, то последующий вызов метода СледующийПоВыражениюXPath не гарантирует корректный поиск, так как стек элементов, накопленный при обработке выражения, может не соответствовать текущему контексту чтения. Для корректной работы последующих вызовов поиска требуется не подниматься выше относительно контекста текущего найденного элемента.

Например, при структуре XML /root/a/b/c и поиске по выражению /root/a допускается чтение элементов b и с, но при выходе в элемент root последующий поиск по выражению будет работать некорректно.

Исключения

ИсключениеНедопустимоеСостояние - при попытке повторно определить новое выражение для текущего чтения.

Примеры

Исходная строка XML

<?xml version="1.0" encoding="UTF-8"?>
<ОстаткиТоваров xmlns="http://company/data/stock">
<Склад Код="M001">
<Товар Код="Т100" ЕИ="шт">
<Запас Вид="1" Количество="20.00"/>
<Запас Вид="2" Количество="80.00"/>
</Товар>
</Склад>
<Склад Код="M002">
<Товар Код="Т100" ЕИ="шт">
<Запас Вид="1" Количество="2.00"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
<Товар Код="Т101" ЕИ="шт">
<Запас Вид="1" Количество="10.00"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
<Товар Код="Т102" ЕИ="л">
<Запас Вид="1" Количество="1.00"/>
<Запас Вид="2" Количество="5.00"/>
</Товар>
<Товар Код="Т103" ЕИ="кг">
<Запас Вид="1" Количество="5.50"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
</Склад>
</ОстаткиТоваров>

Код поиска XPath

структура СтруктураЗапасы
обз пер КодТовара: Строка
обз пер КодСклада: Строка
обз пер Запасы: Множество<СтруктураЗапас>
;

структура СтруктураЗапас
обз пер Вид: Число
обз пер Количество: Число
;

метод НайтиЗапасыТовараНаСкладе(ДокументXml: Файл): СтруктураЗапасы
знч КодСклада = "M002"
знч КодТовара = "Т101"
пер ЗапасыРезультат = новый СтруктураЗапасы(КодТовара, КодСклада, новый Множество<СтруктураЗапас>())
исп ПотокЧтения = ДокументXml.ОткрытьПотокЧтения()

знч ПрефиксыПространствИмен = {"": "http://company/data/stock"}
знч ВыражениеXPath = новый ВыражениеXPathЧтенияXml("/ОстаткиТоваров/Склад[@Код = '%{КодСклада}']/Товар[@Код = '%{КодТовара}']/Запас", ПрефиксыПространствИмен)

знч Чтение = новый ЧтениеXml(ПотокЧтения)

пока Чтение.СледующийПоВыражениюXPath(ВыражениеXPath)
знч Запас = новый СтруктураЗапас(Чтение.ЗначениеАтрибутаКакЧисло("Вид"), Чтение.ЗначениеАтрибутаКакЧисло("Количество"))
ЗапасыРезультат.Запасы.Добавить(Запас)
;

возврат ЗапасыРезультат
;

ЭтоПустойЭлемент

ЭтоПустойЭлемент(): Булево
Возвращает признак того, что текущий узел имеет тип НачалоЭлемента и представлен в XML узлом вида <tag/>.


Список унаследованных методов

Объект

ВСтроку, ПолучитьТип, Представление