Имя: Пароль:
1C
 
Как сделать пакет XDTO со Списком XDTO с разнородными элементами ?
,
0 Fragster
 
гуру
14.04.15
18:39
Для такой схемы:

+ Code

<?xml version = "1.0" encoding = "utf-8"?>
<xs:schema xmlns="test" targetNamespace="test" xmlns:xs="http://www.w3.org/2001/XMLSchema&quot;
  elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:complexType name="seq">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:choice>
        <xs:element name="elem1"/>
        <xs:element name="elem2"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="root" type="seq"/>
</xs:schema>

Валидный файл

<?xml version = "1.0" encoding = "utf-8"?>
<root xmlns="test"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;

  <elem2></elem2>
  <elem1></elem1>
  <elem1></elem1>
  <elem1></elem1>
  <elem2></elem2>
  <elem2></elem2>
</root>

Однако эта схема не импортируется в 1с (получаем пустой пакет).

Вопрос: как мне накликать пакетXDTO, чтобы можно было создавать и проверять подобные XML?
1 Serginio1
 
14.04.15
19:00
2 Лодырь
 
14.04.15
19:08
закладка
3 Fragster
 
гуру
14.04.15
19:32
(1) там немного побилось, вот: http://pastebin.com/mRY5jgmc
выдает именно такой XSD (ну, +-, в (0) правильнее)
4 Fragster
 
гуру
14.04.15
19:43
вот при такой картинке http://snag.gy/sy6P0.jpg

вот такой код работает
    Тип = ФабрикаXDTO.Тип("test", "seq");
   Корень = ФабрикаXDTO.Создать(Тип);
  
   Тип1 = ФабрикаXDTO.Тип("test", "elem1");
   Тип2 = ФабрикаXDTO.Тип("test", "elem2");
  
   Корень.elem2.Добавить(ФабрикаXDTO.Создать(Тип2));
   Корень.elem2.Добавить(ФабрикаXDTO.Создать(Тип2));
   Корень.elem1.Добавить(ФабрикаXDTO.Создать(Тип1));
   Корень.elem1.Добавить(ФабрикаXDTO.Создать(Тип1));
   Корень.elem2.Добавить(ФабрикаXDTO.Создать(Тип2));
   Корень.elem1.Добавить(ФабрикаXDTO.Создать(Тип1));
  
   Запись = Новый ЗаписьXML;
   Запись.УстановитьСтроку();
   ФабрикаXDTO.ЗаписатьXML(Запись, Корень);
   XML = Запись.Закрыть();


только вот XSD при экспорте из 1с получается неправильная http://pastebin.com/kLepc3jr и редакторы её жрут неправильно (в списке либо только elem1, либо только elem2)
5 DmitrO
 
14.04.15
19:57
ну, ты же понимаешь, что в XDTO на одном уровне одноименные элементы могут располагаться только последовательно
6 Fragster
 
гуру
14.04.15
19:59
(5) где это написано?
7 DmitrO
 
14.04.15
20:01
не помню чтобы это было где-то написано..
но это следует из объектной модели (объекты языка 1С и их методы)
8 Fragster
 
гуру
14.04.15
20:03
(7) ну вот например ситуация - внешний источник, присылает нам схему http://pastebin.com/mRY5jgmc и мы по ней должны парсить его XML. Как бы составной тип у него в данных.
9 DmitrO
 
14.04.15
20:06
(7)+ это расплата за удобное отображение вложенных элементов в свойства объекта XDTO, удобное обращение к ним по имени свойства
10 Asmody
 
14.04.15
20:08
Блин, точно не помню, вроде как делал тип значения объединение, там где-то прописываются нужные типы. А потом делаешь список уже этого типа.
11 DmitrO
 
14.04.15
20:16
(8)а именно такая последовательность элементов важна? может это просто не упорядоченная? т.е. они могут так идти не последовательно, но могут и последовательно (что и получается у XDTO).
12 Fragster
 
гуру
14.04.15
20:17
(10) http://snag.gy/xJkSZ.jpg

Ошибка проверки модели XDTO: xdto-valueType-4.1.2    тип: union    пакет: test
Тип объединения должен являться типом значения
Ошибка проверки модели XDTO: xdto-valueType-4.1.2    тип: union    пакет: test
Тип объединения должен являться типом значения
13 Fragster
 
гуру
14.04.15
20:18
(11) важна последовательность обработки данных :(
14 quest
 
14.04.15
21:09
а если через XSLT сортировать? потом прочесть
15 quest
 
14.04.15
21:10
если полследовательность важна - сохранить старое значение смещения в атрибут, потом по нему восстановить?
16 Fragster
 
гуру
14.04.15
21:56
Файл присылают снаружи, двусторонний обмен
17 Fragster
 
гуру
15.04.15
08:36
подниму с утра
18 Fragster
 
гуру
15.04.15
11:31
и ещё
19 Serginio1
 
15.04.15
12:03