Имя: Пароль:
1C
1С v8
Преобразование XML через Фабрику XDTO.
,
0 pmb
 
01.08.12
16:32
Есть файл в формате XML c таким заголовком:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfDetailItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
 <DetailItem>
   <DetailInfo xsi:type="fDetailsSOAP_price">

Пытаюсь преобразовать его с помошью ФабрикиXDTO  

НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML("http://tempuri.org/");
Фабрика_XDTO = Новый ФабрикаXDTO(НаборСхемXML);
Фабрика_XDTO.ПрочитатьXML(ЧтениеXML);

полчаю ошибки:

{Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (ПрочитатьXML)
                   Фабрика_XDTO.ПрочитатьXML(ЧтениеXML);
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [32,7]
Проверка дополнительного свойства:
   форма: Элемент
   имя: {http://tempuri.org/}DetailItem
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [32,7]
Проверка дополнительного свойства:
   форма: Элемент
   имя: {http://tempuri.org/}DetailInfo
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [43,32]
Проверка дополнительного свойства:
   форма: Элемент
   имя: {http://tempuri.org/}Quantity
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.w3.org/2001/XMLSchema}anyType

по причине:
Несоответствие типов XDTO:
Свойство не может содержать неопределенное значение


Помогите как правильно прочитать такой файл XML?
1 Maxus43
 
01.08.12
16:37
из какой базы хмл выгружен?
2 mikecool
 
01.08.12
16:38
(1) +1 нужна схема базы, из которой выгружено
3 pmb
 
01.08.12
16:40
(2) XML это получен через веб-сервис. Ессть описание этого веб-сервиса (WSDL) как из него можно вытащить схему?
4 Maxus43
 
01.08.12
16:43
собсно схему ищет там "http://www.w3.org...."
Если конфы идентичны - можно подсунуть "currentconfig", точный синтаксис не помню
5 pmb
 
01.08.12
16:56
(4) это не выгрузка из одной базы в другую....
6 Maxus43
 
01.08.12
17:25
а что это? то что хочеш загрузить различается по структуре, грубо говоря XDTO не может преобразовать в свой объект то что в файле, они разные
7 Asmody
 
01.08.12
17:42
(3) по WSDL можно получить фабрику:

WSОпределение=Новый WSОпределение(ФайлWSDL);
WSСервис=WSОпределение.Сервисы[0];
WSПрокси=Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
ФабрикаСервиса=WSПрокси.ФабрикаXDTO;
8 pmb
 
01.08.12
17:53
(6) хочу загрузить файл, полученный от веб-сервиса. Есть описание веб-сервиса (WSDL), файл получаю с помощью объекта WinHttp.WinHttpRequest.5.1

решил почти как в (7), только немного проше (не знаю насколько правильно, но работает)

WSОпределение        = Новый WSОпределения(СсылкаНаОпписаниеСервиса);
ЧтениеXML= Новый ЧтениеXML();    
ЧтениеXML.УстановитьСтроку(ОтветСервера);

ПакетXDTO = WSОпределение.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
9 Asmody
 
01.08.12
17:55
(8) а чего ты сразу через WS-ссылку не хочешь сделать?
10 pmb
 
01.08.12
17:56
(9) получить данные через WS-ссылку?
11 Asmody
 
01.08.12
17:59
(10) ну да. оно же позволяет прямо методы веб-сервиса вызывать
12 pmb
 
01.08.12
18:01
(11) периодически методы веб-сервиса выполняются очень долго и вызов метода заканчивается ошибкой.
У WinHttp.WinHttpRequest.5.1 есть возможность установки таймаута. Сейчас тестирую, вроде нормально работает ;)