Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Чтение XML с помощью XDTO (не определяет типы)          
Henk Подменю пользователя
сообщение 08.07.17, 14:59
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

Всем привет!
Итак, вкратце, пишу api на http-сервисах и чтобы мои xml были как-то типизированы, решил описать схему XDTO. Действительно, очень удобная вещь в плане чтения/записи, да и обрабатывать ошибки проще, просто в исключении будет описание, почему xml невалидный. Все было круто, но как оказалось при создании xml ругается, что мы пытаемся строку записать в число, или длина нашей строки больше, вообще все что указали в XDTO все это учитывается, но вот при чтении xml, все разбирается как строка и глубоко побоку какие там типы у нас в XDTO. Собственно в этом и вопрос, как заставить 1С понимать что xml невалидный, то ли XDTO я коряво описал, то ли нужно копать в строну сериализаторов, короче, приветствуется любая помощь или догадки. Спасибо.

Схема
<xs:schema xmlns:ns1="http://v8.1c.ru/8.1/data/core" xmlns:tns="http://блаблабла" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://блаблабла" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:import namespace="http://v8.1c.ru/8.1/data/core"/>
    <xs:complexType name="client">
        <xs:sequence>
            <xs:element name="clientID" type="xs:string"/>
            <xs:element name="clientName" type="xs:string"/>
            <xs:element name="clientType" type="xs:decimal"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="clients">
        <xs:sequence>
            <xs:element name="client" type="tns:client" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>


Создаю для теста XML тут будет ругаться если в clientType присвоить "какая-то строка":
Код
    ИмяФайла = "D:\api\test.xml"; 
    МойXML = Новый ЗаписьXML;
    ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
    МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
    МойXML.ЗаписатьОбъявлениеXML();
    
    clientsТип = ФабрикаXDTO.Тип("http://блаблабла", "clients");
    clientТип = ФабрикаXDTO.Тип("http://блаблабла", "client");
    
    clients = ФабрикаXDTO.Создать(clientsТип);

    Для н = 1 По 10 Цикл
        client = ФабрикаXDTO.Создать(clientТип);
        client.clientID = "" + Строка(н);
        client.clientName = "Контрагент №" + Строка(н);
        client.clientType = 1;
        clients.client.Добавить(client);
    КонецЦикла;
        
    
    ФабрикаXDTO.ЗаписатьXML(МойXML, clients);
    МойXML.Закрыть();


Но когда читатю могу в XML полный бред написать и никакой ошибки не получу, ну всмысле ошибки о типах.
Код
структурныйТип = ФабрикаXDTO.Тип("http://блаблабла", ТипОбъекта); 
    XML = Новый ЧтениеXML;
    XML.УстановитьСтроку(тутТекстXML);
ПолученныйОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(XML, структурныйТип);


Сообщение отредактировал Vofka - 10.07.17, 7:18

Vofka Подменю пользователя
сообщение 10.07.17, 7:19
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Вы это все (читаете и пишете) в одной базе делаете?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 10:08
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!