Имя: Пароль:
1C
 
XDTO и корневые свойства пакетов
0 HomoAlbus
 
03.11.15
11:52
Добрый день, коллеги. Пишу данные в xml используя xsd схему, в ней есть такая штука:
...
<xsd:complexType name="CategoriesRequest">
    <xsd:sequence>
        <xsd:element name="categories">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="category" type="tns:Category" minOccurs="1" maxOccurs="unbounded" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>
...
<xsd:element name="categoriesRequest" type="tns:CategoriesRequest" />

Дальше работаю с XDTO как обычно:

ПакетXDTO = СтруктураПараметров.ФабрикаXDTO.Пакеты.Получить(СтруктураПараметров.URI);    
ТипОбъектаRequest = СтруктураПараметров.ФабрикаXDTO.Тип(СтруктураПараметров.URI, ТипRequest);    
ОбъектRequest = СтруктураПараметров.ФабрикаXDTO.Создать(ТипОбъектаRequest);

ТипСписка = ПакетXDTO.КорневыеСвойства.Получить(ТипRequest).Тип.Свойства.Получить(СтруктураПараметров.ИмяСвойстваСписка).Тип;
ОбъектСписка = СтруктураПараметров.ФабрикаXDTO.Создать(ТипСписка);
ОбъектRequest[СтруктураПараметров.ИмяСвойстваСписка] = ОбъектСписка;
СформироватьСписокCategories(ОбъектRequest.categories.category, СтруктураПараметров);

После чего пишем его в XML. Все чудесно, кроме одной проблемы - имя корневого элемента.
Сейчас сериализатор пишет имя корневого элемента следующим образом:
<CategoriesRequest бла-бла нэймспэйсы>

Тогда как сервис требует, что бы имя корневого элемента было:
как в element в схеме:
<categoriesRequest бла-бла нэймспэйсы>

Т.е. разница в регистре первого символа. Мне кажется, что я что-то делаю не так, но не пойму что. categoriesRequest в пакетах представлен как корневой элемент с типом СвойствоXDTO. Если получить тип по нему и снова записать объект с этим типом в XML, то имя корневного элемента также с заглавной буквы...

Буду рад любой помощи, спасибо заранее.
1 Serginio1
 
03.11.15
12:33
2 Serginio1
 
03.11.15
12:39
3 HomoAlbus
 
03.11.15
12:48
(2) Спасибо за ссылки, но нам не моя проблема, насколько я могу судить.
4 Serginio1
 
03.11.15
13:59
(3) Прошу прощения. Не разобрался.
По схеме есть КорневоеСвойство с типом  CategoriesRequest.
А записываться в файл будет имя типа
5 Serginio1
 
03.11.15
14:04
Хотя http://erpsolution.ru/forum/showthread.php?t=876&page=2
Корневые объекты – перечень корневых объектов пакета XDTO. Представляет собой объявления объектов/значений, которые могут являться корневыми элементами документов XML, принадлежащих URI пространства имен данного пакета XDTO.
6 Serginio1
 
03.11.15
14:05
ФабрикаXDTO (XDTOFactory)
ЗаписатьXML (WriteXML)
Синтаксис:

ЗаписатьXML(<ЗаписьXML>, <Элемент>, <ЛокальноеИмя>, <URIПространстваИмен>, <Форма>, <УказаниеТипа>)
Параметры:

<ЗаписьXML> (обязательный)

Тип: ЗаписьУзловDOM, ЗаписьFastInfoset, ЗаписьXML.
Объект записи XML.
<Элемент> (обязательный)

Тип: ЗначениеXDTO; ОбъектXDTO; Неопределено.
Записываемое значение.
<ЛокальноеИмя> (необязательный)

Тип: Строка.
Локальное имя записываемого элемента данных.
<URIПространстваИмен> (необязательный)

Тип: Строка.
URI пространства имен записываемого элемента данных.
<Форма> (необязательный)

Тип: ФормаXML.
Форма представления элемента данных в XDTO.
Значение по умолчанию: Элемент.
<УказаниеТипа> (необязательный)

Тип: НазначениеТипаXML.
Вариант назначения типа элемента данных XDTO.
Значение по умолчанию: Неявное.
Описание:

Записывает указанный элемент данных XDTO в объект записи XML.
7 HomoAlbus
 
03.11.15
14:37
(6) Аве Миста, Аве Serginio1 ! Кланяюсь в землю, все получилось! Огромное спасибо.
8 Fragster
 
гуру
03.11.15
14:44
а если в пакете у типа указать локальное имя?
9 HomoAlbus
 
03.11.15
15:53
(8) Схемой я не владею, получаю по WS. Как правильно отметил Serginio1 по дефолту имя объектаXDTO записываемого в XML = имени типа. Поэтому нужно заполнять третий параметр при записи. В общем все получилось и всем спасибо.