Стд::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, Товар: СтруктураТовар)
Товар.Производитель = новый СтруктураПроизводитель(Чтение.ЗначениеАтрибута("Наименование"))
Товар.Производитель.Страна = Чтение.ЗначениеАтрибута("Страна")
Товар.Производитель.Штрихкод = Неопределено
попытка
Товар.Производитель.Штрихкод = Чтение.ЗначениеАтрибутаКакЧисло("Штрихкод")
поймать И: ИсключениеНедопустимыйАргумент
;
;
Результат со строковым представлением объекта после чтения XML
Чтение значений атрибутов и элементов различных типов
Исходная строка 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.НачалоЭлемента
если Чтение.ЛокальноеИмя == "Атрибуты"
пер Строка = Чтение.ЗначениеАтрибута("Строка")
пер Байты = Чтение.ЗначениеАтрибутаКакБайты("Байты")
пер БайтыBase64 = Чтение.ЗначениеАтрибутаКакБайтыBase64("БайтыBase64")
пер Булево = Чтение.ЗначениеАтрибутаКакБулево("Булево")
пер Время = Чтение.ЗначениеАтрибутаКакВремя("Время")
пер Дата = Чтение.ЗначениеАтрибутаКакДата("Дата")
пер ДатаВремя = Чтение.ЗначениеАтрибутаКакДатаВремя("ДатаВремя")
пер Длительность = Чтение.ЗначениеАтрибутаКакДлительность("Длительность")
пер Момент = Чтение.ЗначениеАтрибутаКакМомент("Момент")
пер Ууид = Чтение.ЗначениеАтрибутаКакУуид("Ууид")
пер Число = Чтение.ЗначениеАтрибутаКакЧисло("Число")
;
если Чтение.ЛокальноеИмя == "Строка"
пер Строка = Чтение.ПрочитатьСодержимоеКакСтроку()
;
если Чтение.ЛокальноеИмя == "Байты"
пер Байты = Чтение.ПрочитатьСодержимоеКакБайты()
;
если Чтение.ЛокальноеИмя == "БайтыBase64"
пер БайтыBase64 = Чтение.ПрочитатьСодержимоеКакБайтыBase64()
;
если Чтение.ЛокальноеИмя == "Булево"
пер Булево = Чтение.ПрочитатьСодержимоеКакБулево()
;
если Чтение.ЛокальноеИмя == "Время"
пер Время = Чтение.ПрочитатьСодержимоеКакВремя()
;
если Чтение.ЛокальноеИмя == "Дата"
пер Дата = Чтение.ПрочитатьСодержимоеКакДату()
;
если Чтение.ЛокальноеИмя == "ДатаВремя"
пер ДатаВремя = Чтение.ПрочитатьСодержимоеКакДатаВремя()
;
если Чтение.ЛокальноеИмя == "Длительность"
пер Длительность = Чтение.ПрочитатьСодержимоеКакДлительность()
;
если Чтение.ЛокальноеИмя == "Момент"
пер Момент = Чтение.ПрочитатьСодержимоеКакМомент()
;
если Чтение.ЛокальноеИмя == "Ууид"
пер Ууид = Чтение.ПрочитатьСодержимоеКакУуид()
;
если Чтение.ЛокальноеИмя == "Число"
пер Число = Чтение.ПрочитатьСодержимоеКакЧисло()
;
;
;
;
См. также
ЗаписьXml
Конструкторы
ЧтениеXml
Конструктор чтения XML из строки
Источник
с настройками
Настройки
.
Перегрузка
ЧтениеXml(Источник: ПотокЧтения, Настройки: НастройкиЧтенияXml, Кодировка: Кодировка|Строка = Кодировка.Utf8)
ЧтениеXml
Конструктор чтения XML из потока
Источник
с настройками
Настройки
и кодировкой
Кодировка
.
Перегрузка
ЧтениеXml(Источник: Строка, Настройки: НастройкиЧтенияXml)
Свойства
Автономный
ТолькоЧтение
Значение атрибута standalone
элемента объявления XML.
Если атрибут не указан или объявление не прочитано (отсутствует), то Ложь
.
ВерсияXml
ТолькоЧтение
Версия спецификации XML, которой соответствует документ XML (получается из объявления XML).
ВидУзла
ТолькоЧтение
Вид текущего узла или Неопределено
, если чтение еще не начато или уже завершено.
Значение
ТолькоЧтение
Текстовое значение текущего узла XML.
Если для узла текстовое значение не определено, то содержит пустую строку.
Узлы, для которых определено текстовое значение:
СекцияCDATA
- содержимое секции CDATA,
Комментарий
- содержимое комментария,
ОпределениеТипаДокумента
- внутреннее подмножество (internal subset),
ИнструкцияОбработки
- содержимое инструкции обработки, исключая адрес (target),
Текст
- содержимое текстового узла,
СсылкаНаСущность
- текст сущности.
Учитывается значение параметра ИгнорироватьПробелыВЗначениях.
После окончания текста XML возвращает пустую строку.
ИмеетЗначение
ТолькоЧтение
Признак что текущий узел содержит текстовое значения.
После окончания текста XML возвращает Ложь
ИмеетИмя
ТолькоЧтение
Признак наличия у текущего узла имени.
После окончания текста XML возвращает Ложь
Имя
ТолькоЧтение
Имя текущего узла XML.
Содержит квалифицированное имя для текущего узла. Имя зависит от типа текущего узла:
ОпределениеТипаДокумента
- имя типа документа,
НачалоЭлемента
- имя элемента,
КонецЭлемента
- имя элемента,
СсылкаНаСущность
- имя ссылки на сущность,
ИнструкцияОбработки
- адрес инструкции обработки (target).
Для узлов, у которых имя не определено, свойство содержит пустую строку.
После окончания текста XML возвращает пустую строку.
ЛокальноеИмя
ТолькоЧтение
Локальное имя текуще го узла XML.
Содержит неквалифицированное имя для текущего узла.
После окончания текста XML возвращает пустую строку.
Префикс
ТолькоЧтение
Префикс текущего узла. Имеет смысл для узлов типов НачалоЭлемента
, КонецЭлемента
.
Для узлов остальных типов или после окончания текста XML возвращает пустую строку.
ПространствоИмен
ТолькоЧтение
URI пространства имен текущего узла.
После окончания текста XML возвращает пустую строку.
Методы
ЗначениеАтрибута
Возвращает строку, представляющую значение атрибута с именем
Имя
и пространством имен
ПространствоИмен
.
Исключения
ИсключениеНедопустимоеСостояние - если:
ЗначениеАтрибутаКакБайты