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

ЧтениеXml

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

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


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

Объект

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