Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение XML с помощью XDTO (не определяет типы)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Henk
Всем привет!
Итак, вкратце, пишу 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
Вы это все (читаете и пишете) в одной базе делаете?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.