Как в XSD-схеме задать массив из одного элемента? #753910


#0 by D_Pavel
Продукция в схеме так обозначена: Если в XML много строк с Продукцией, то когда разбираю XML с помощью Фабрики, то все ок, в 1С Поставщик.Продукция - это массив:           <Поставщик> Если строка одна, то 1С считает это не массивом, а объектом: (Поставщик.Продукция - это объект) Как сделать чтобы 1С всегда считала Продукцию массивом, даже если ее всего один элемент? Может в схеме как-то по другому задать?
#1 by spock
Так?
#2 by D_Pavel
нет, не так. Это то же самое что и у меня. Все равно как объект воспринимает :(
#3 by D_Pavel
Ап
#4 by D_Pavel
Как же долго просыпаются умные одноэсники на западе... А от восточных совсем никакой пользы.
#5 by Fragster
а смысл сего действия?
#6 by D_Pavel
Чтобы не получить исключение при обходе массива циклом, и не добавлять проверок на тип.
#7 by Serginio1
Поставь minOccurs="0"
#8 by Fragster
это не сделает его массивом
#9 by Fragster
проблема в том, что в неправильно читается. прошу привести пример кода и первой строки XML
#10 by Fragster
а также нужно учитывать то, что 1с не умеет работать с "неопределенным" пространством имен, т.е. и в XML и в схеме оно должно быть.
#12 by Fragster
Интересует фрагмент ФабрикаXDTO.ПрочитатьXML, как получается параметр "тип". Ну и фрагмент XML, где определяется пространство имен (чаще всего - корневой тег)
#13 by D_Pavel
У меня правильно читается. Что именно не читается? Как пример кода может повлиять на то что человек знающий ответ на мой вопрос зайдет в эту тему?
#14 by Fragster
я знаю ответ на твой вопрос. у тебя XML читается не как объект твоего типа из схемы, а как anytype.
#15 by D_Pavel
Пространство имен конечно же есть, иначе бы ошибка возникла еще на чтении XML.
#16 by D_Pavel
Понял тебя. Сейчас проверю.
#17 by Serginio1
Делает прекрасно Такой массив будет прекрасно считываться и с одним элементом minOccurs="0" maxOccurs="unbounded"/> А вот такой minOccurs="1" maxOccurs="unbounded"/> При одном элементе будет давать элемент, а не список
#18 by D_Pavel
Спасибо, КО! Темку можно закрыть.
#19 by Fragster
нифига. нифига.
#20 by Fragster
вот правильное чтение:
#21 by Fragster
хоть minOccurs="1", хоть 0, все равно будет список при maxOccurs="unbounded"
#22 by Fragster
а вот при отсутствии указания maxOccurs указание minOccurs в 0 делает тег необязательным. А свойство у результирующего объекта все равно будет.
#23 by Serginio1
Ну да. Проверь. Я уже на эти грабли наступал. Заодно посмотри чему равен  minOccurs по умолчанию
#24 by Fragster
ты код запустил?
#25 by D_Pavel
Зачем указываешь в XML это xsi:schemaLocation=""test file:///X:/tmp/Untitled.xsd"" если у тебя в прочтении XML фабрикой и так указан тип?
#26 by Fragster
это потому что XML делался во внешнем редакторе. можно удалить, поведение кода не изменится.
#27 by D_Pavel
Спасибо! Темку можно закрыть.
#28 by Serginio1
Для примера сделал с minOccurs=""1"" В отладчике показывает Объект.Продукция это строка. Стоит добавить второй элемент Объект.Продукция.Добавить("ВторойЭлемент"); И уже показывает СписокXDTO
#29 by Serginio1
Но 1С генерит такую схему <xs:schema xmlns:tns="http:/Test5" xmlns:xs="; targetNamespace="http:/Test5" attributeFormDefault="unqualified" elementFormDefault="qualified">
#30 by Fragster
я хз, что там у тебя в пакете. код запускал? работает?
#31 by Fragster
убрал в коде minOccurs вообще. все равно список.
#32 by Serginio1
Я сейчас добавлю в схему в 29 и проверю. Смысл то в тм, что 1С генерит такую схему при минимальном количестве 1
#33 by Serginio1
Проверь 28
#34 by Serginio1
Кстати в отладчике показывает минимальное количество 1
#35 by Fragster
ты забыл ЧтениеXML.ПерейтиКСодержимому;
#36 by Fragster
+ и у тебя ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя) из-за этого возвращает неопределено.
#37 by Serginio1
Да она и так читает. Твоя показыват список Кстати строка такая <Поставщик xmlns="http:/Test5" xmlns:xs="; xmlns:xsi=";     <Продукция>ОдинЭлемент</Продукция> Сечас поставлю Я создал тип в тестовой конфигурации. Сейчас через файл сделаю
#38 by Serginio1
Но смысл в том, что 1С генерит при минимальном количестве схему 29. Проверь
#39 by Fragster
все хорошо со схемой. на то, список это или объект - влияет maxOccurs. если там не 1, то будет список. у тебя неправильно идет определение типа. вернее в него передаются неверные параметры. проверь в отладчике - если не сделать Чтение.ПерейтиКСодержимому, то у тебя получается Фабрика.Тип("","");
#40 by Serginio1
Посыпаю свою голову пеплом Забыл ЧтениеXML.ПерейтиКСодержимому;
#41 by D_Pavel
В общем проверил, minOccurs 0 не влияет.
#42 by Fragster
что-то я добрый сегодня. надо было в и вас обоих тыкать до просветления
#43 by Serginio1
Еще раз прошу прощение и большое спасибо за поправку и добродушие. Просто давным давно работа с с сайтом на Asp.Net и там формировались классы как Object и при 1 элементе давали не массив а элемент. Это была такая реализация в Net. На 1С не проверял. в 28 чтение происходило через AnyType
#44 by D_Pavel
Я и так на понял в чем собака порылась.
#45 by D_Pavel
как быть если файл прислали без указанного xmlns ?
#46 by D_Pavel
Up
#47 by Serginio1
Самому добавить
#48 by Serginio1
#49 by D_Pavel
Строку просто заменить? Ок, годится.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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