Проверка XML на соответствие схеме #733422


#0 by vi0
Есть XML-данные которые нужно проверить и загрузить в 1с8. Структура XML здесь содержит два уровня: корневой элемент как обязательный, и элементы в которых передаются документы: накладные итп (фактически уровней больше, но здесь не принципиально). Создан xdto-пакет в котором есть тип для каждого загружаемого документа. ВОПРОС: Как проверить эти документы - элементы второго уровня на сооветствие схеме? При такой структуре, как я понимаю я должен считывать поочередно элементы и создавать ОбъектXDTO, при этом платформа выполнит проверку. Проверка не выполняется т.к. в методе ПрочитатьXML я не задал тип. Но как я узнаю тип если там могут быть разные документы? И правильно ли мне самому определять тип? ЧтениеXML.Прочитать; Для решение вопроса я могу в xdto-пакете создать некий искуственный корневой тип, в нем сделать списки документов и считывать весь xml одним вызовом (придется и структуру xml привести к этому формату). Но правильна ли такая искуственность? И это чревато неоправданным расходом ресурсов при больших объёмах, как я понимаю.
#1 by vi0
подниму
#2 by vi0
ответ найден в документообороте действительно можно последовательно читать и проверять элементы, получая тип из имени элемента
#3 by vi0
в топике я писал, что для решение вопроса я могу в xdto-пакете создать некий искусственный корневой тип, в нем сделать списки документов и считывать весь xml одним вызовом (придется и структуру xml привести к этому формату). а можно ли не создавая этого корня создать ОбъектXDTO одним вызовом ФабрикаXDTO.ПрочитатьXML когда в XML файле находятся разнородные элементы, и чтобы при этом выполнилась проверка на соответствие ПакетуXDTO ? вот так я могу сделать, но проверка при этом не выполняется: какой тип нужно указать вторым параметром в ПрочитатьXML, чтобы выполнилась проверка?
#4 by vi0
имею ввиду создать один ОбъектXDTO для всего xml-файла
#5 by Goggy
Прикольный монолог :)
#6 by DrZombi
А зачем тебе проверять, когда как ни крути, ты это загрузишь :)
#7 by vi0
если проверку не пройдет то загружать не буду например в xml не будет обязательного элемента с уникальным идентификатором
#8 by Serginio1
ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
#9 by vi0
Это можно использовать при переборе элементов объектом ЧтениеXML В именно такой способ привел вопрос как прочитать весь xml с плоской структурой одним чтением ФабрикаXDTO.ПрочитатьXML, когда в xml на одном уровне хранятся элементы разного типа (например данные документов)
#10 by Serginio1
Или ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ПолучитьXMLТип(ЧтениеXML)
#11 by Serginio1
Прочитай последовательно. В чем проблемы?
#12 by vi0
рассматриваю способ загрузки xml, когда нужно один раз загрузить его в ОбъектXdto и дальше неоднократно получать из него данные, перебирать/искать несколько раз, при необходимости
#13 by Serginio1
Сериализуй в список или в массив и прочитаешь все за один раз. Только это хорошо когда объектов мало.
#14 by vi0
"Сериализуй в список" - на этапе выгрузки? т.е. здесь не избежать изменения структуры xml,
#16 by Serginio1
Обычно при выгрузке в XML записывают внутри элемента     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", ";);     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", ";); Можно создать массив объектов и сериализовать его в XML и прочитать его полностью
#17 by vi0
> Обычно при выгрузке в XML записывают внутри элемента > ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("Данные")); я бы даже сказал, что так нужно сделать обязательно по стандарту xml и по другому не получится > Можно создать массив объектов и сериализовать его в XML тогда получается что, чтобы читать одним вызовом и одновременно проверять - нужно делать особую стуктуру xml вижу еще такой способ: проверку сделать перебором используя ЧтениеXML, или как-то иначе, а потом уже просто читать без проверки:
#18 by Serginio1
Нет не надо. делать. Например
#19 by vi0
не надо делать что?
#20 by Serginio1
Не надо ничего делать дополнительно с XML  если выгружается один объект. Правда когда этих объектов очень много, они могут отожрать всю память.
#21 by Serginio1
Кода много объектов в массиве. А массив это один объект
#22 by vi0
инфа, конечно полезная, но есть условия: xml имеет определенную структуру и выгружается из внешней системы (не v8), и мне нужно решить вопрос с этими условиями
#23 by vi0
+ т.е. особая структура xml как раз нужна, она делается Сериализатором см
#24 by Serginio1
Я говорил, что самому ничего для этого делать не надо в отличие от 16
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С