|
8.2 Сериализировать в xml файл в структуру | ☑ | ||
---|---|---|---|---|
0
invest
03.02.16
✎
14:10
|
Доброго времени суток.
Коллеги подскажите как можно загрузить хмл файл следующего вида в структуру. <?xml version="1.0" encoding="UTF-8"?> <Orders> <Item> <Number>О20К-000433</Number> <Date>2016-01-26T17:54:14</Date> <Object>1d2851a9-c35b-11e5-a659-6cf04904b899</Object> <Customer>6493917f-3796-11e1-8032-6cf04904b899</Customer> <Comment/> <Invoice>false</Invoice> <Deliver>2016-01-27T00:00:00</Deliver> <Manager>e242745a-c261-11e1-af33-4487fc8cb1a5</Manager> <Rows> <Item> <Object>1d2851a9-c35b-11e5-a659-6cf04904b899</Object> <Product>95e4caa3-1e62-11e4-a622-6cf04904b899</Product> <Amount>5</Amount> </Item> <Item> <Object>1d2851a9-c35b-11e5-a659-6cf04904b899</Object> <Product>9d9c0167-1e69-11e4-a622-6cf04904b899</Product> <Amount>5</Amount> </Item> <Item> <Object>1d2851a9-c35b-11e5-a659-6cf04904b899</Object> <Product>9d9c0182-1e69-11e4-a622-6cf04904b899</Product> <Amount>3</Amount> </Item> </Rows> </Item> </Orders> |
|||
1
Рэйв
03.02.16
✎
14:19
|
в дерево складывай.Зачем тебе структура?
|
|||
2
invest
03.02.16
✎
14:20
|
(1) есть примерчик как в дерево складывать?
|
|||
3
Рэйв
03.02.16
✎
14:20
|
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу); Пока Чтение.Прочитать() Цикл // Прочитать "структурные части" элементов. // Проверить, какая часть элемента - текущая. Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла); // Атрибуты элементов можно читать только если текущая часть - // начало элемента Пока Чтение.ПрочитатьАтрибут() Цикл // Прочитать данные узла атрибута. ТипУзла = Чтение.ТипУзла; Имя = Чтение.Имя; Значение = Чтение.Значение; // Обработать полученные значения. КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда // В примере просто выводим текст в окно сообщений. Сообщить("Текст:" + Чтение.Значение); ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // В примере просто выводим признак конца элемента // в окно сообщений Сообщить("--Конец:" + Чтение.Имя); КонецЕсли; КонецЦикла; (С)Габец |
|||
4
Рэйв
03.02.16
✎
14:21
|
в узлах добавляй ветки
|
|||
5
invest
03.02.16
✎
14:21
|
(3) благодарю, но подобный метод мне знаком. Может есть что проще?
|
|||
6
Serginio1
03.02.16
✎
14:22
|
Чиай через ФабрикаXDTO
|
|||
7
Serginio1
03.02.16
✎
14:26
|
ЧтениеXML=Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла); ЧтениеXML.ПерейтиКСодержимому(); Имя=ЧтениеXML.Имя; ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,Имя)); Просто будет читать как AnyType |
|||
8
Живой Ископаемый
03.02.16
✎
14:32
|
И еще вот такой ХМЛ прочитается в дерево:
===== <ValueTree xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <column> <Name xsi:type="xs:string">Поле1</Name> <ValueType> <Type>xs:string</Type> <Type>Null</Type> <StringQualifiers> <Length>6</Length> <AllowedLength>Variable</AllowedLength> </StringQualifiers> </ValueType> <Title>Поле1</Title> <Width xsi:type="xs:decimal">6</Width> </column> <column> <Name xsi:type="xs:string">Поле2</Name> <ValueType> <Type>Null</Type> <Type>xs:decimal</Type> <NumberQualifiers> <Digits>0</Digits> <FractionDigits>0</FractionDigits> <AllowedSign>Any</AllowedSign> </NumberQualifiers> </ValueType> <Title>Поле2</Title> <Width xsi:type="xs:decimal">32</Width> </column> <row> <row> <row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">3</Value> </row> <row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">8</Value> </row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">11</Value> </row> <row> <row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">18</Value> </row> <row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">38</Value> </row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">56</Value> </row> <Value xsi:type="Null"/> <Value xsi:type="xs:decimal">67</Value> </row> <row> <row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">3</Value> </row> <row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">8</Value> </row> <Value xsi:type="xs:string">Первое</Value> <Value xsi:type="xs:decimal">11</Value> </row> <row> <row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">18</Value> </row> <row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">38</Value> </row> <Value xsi:type="xs:string">Второе</Value> <Value xsi:type="xs:decimal">56</Value> </row> </ValueTree> ==== http://screencast.com/t/XgymKd3qMg |
|||
9
invest
03.02.16
✎
14:45
|
(7) довольно таки интересный код, буду изучать. Всем спасибо.
|
|||
10
Serginio1
03.02.16
✎
14:45
|
7+ Если, что например в БП3 в модуле ОбменДаннымиXDTOСервер есть функция
ОбъектXDTOВСтруктуру |
|||
11
invest
03.02.16
✎
14:52
|
(10) прогал файл через твой код и в отладчики вижу что ОбъектXDTO.Item.Rows не возвращает коллекцию там только один Item. Это как можно понять?
|
|||
12
invest
03.02.16
✎
14:55
|
(11) тупанул, разобрался. ОбъектXDTO.Item.Rows.Item тут коллекция сидит
|
|||
13
Serginio1
03.02.16
✎
15:01
|
(12) Кстати не пользуешься Помощь с Web сервисом
|
|||
14
Spieluhr
05.02.16
✎
10:09
|
(10) У меня аналогичная задача есть и функция ОбменДаннымиXDTOСервер.ОбъектXDTOВСтруктуру() выдает ошибку при обращении к строкам таблицы
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(3033)}: Ошибка при вызове метода контекста (ПолучитьXDTO) ЗначениеXDTO = Источник.ПолучитьXDTO(Свойство); по причине: Несоответствие свойства и элемента данных XDTO: Свойство: 'Row' Свойство является списковым Вот кусок файла xml: <Components> <Row> <ComponentNumber>25</ComponentNumber> <ComponentQtyPlan>365.00000</ComponentQtyPlan> <ComponentQtyFact>352.38400</ComponentQtyFact> </Row> <Row> <ComponentNumber>147</ComponentNumber> <ComponentQtyPlan>850.00000</ComponentQtyPlan> <ComponentQtyFact>884.50000</ComponentQtyFact> </Row> </Components> Писать обход свойств объекта XDTO в цикле? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |