![]() |
![]() |
|
XDTO | ☑ | ||
---|---|---|---|---|
0
leech001
06.11.11
✎
23:04
|
Создал xml схему такого содержания
<xs:schema xmlns:tns="http://www.vet1.org" xmlns:xs=" www.w3.org/2001/XMLSchema »»" targetNamespace=" www.vet1.org »»" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="data"> <xs:sequence> <xs:element name="header" type="tns:header" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="header"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="version_xmlfile" type="xs:string" use="required"/> <xs:attribute name="programm_name" type="xs:string" use="required"/> <xs:attribute name="guid_station" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="xml1c"> <xs:sequence> <xs:element name="data" type="tns:data" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> написал такой код выгрузки Чтение=Новый ЧтениеXML; Чтение.ОткрытьФайл("d:\3\shema.xsd"); НПДОМ=Новый ПостроительDOM; НДДОМ=НПДОМ.Прочитать(Чтение); НПСхем=Новый ПостроительСхемXML; НоваяСхема=НПСхем.СоздатьСхемуXML(НДДОМ); НаборСхем=Новый НаборСхемXML; НаборСхем.Добавить(НоваяСхема); Фабрика=Новый ФабрикаXDTO(НаборСхем); ТипЕ1Объекта=Фабрика.Тип("http://www.vet1.org","xml1c"); Корень=Фабрика.Создать(ТипЕ1Объекта); ТипЕ2Объекта=Фабрика.Тип("http://www.vet1.org","data"); data=Фабрика.Создать(ТипЕ2Объекта); ТипЕ3Объекта=Фабрика.Тип("http://www.vet1.org","header"); header=Фабрика.Создать(ТипЕ3Объекта); header.version_xmlfile="111"; header.programm_name="222"; header.guid_station="333"; data.header.Добавить(header); Корень.data.Добавить(data); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("d:\3\222.xml"); Запись.ЗаписатьОбъявлениеXML(); Фабрика.ЗаписатьXML(Запись,Корень); Запись.Закрыть(); не могу понять как мне передать текст в элемент "header" чтоб получилось в итогк вот так <?xml version="1.0" encoding="UTF-8"?> <xml1c xmlns="http://www.vet1.org" xmlns:xs=" www.w3.org/2001/XMLSchema »»" xmlns:xsi=" www.w3.org/2001/XMLSchem... »»"> <data> <header version_xmlfile="111" programm_name="222" guid_station="333">444</header> </data> </xml1c> интересует значение 444 как его туда записать ??? В пакете для типа "header" создал свойство "text" с формой Текст, но при попытке записать туда кодом header.text="444"; вываливается ошибка {Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (text) header.text="444"; Помогите пойжалуста разъясните как же туда что то записать. |
|||
1
Лефмихалыч
06.11.11
✎
23:07
|
попробую сразбегу - может не text, а value?
|
|||
2
leech001
06.11.11
✎
23:11
|
Скорректировал как вы и посоветовали до такого кода нужный вроде блок
header.version_xmlfile="111"; header.programm_name="222"; header.guid_station="333"; header.value="444"; РЕЗУЛЬТАТ :( {Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (value) header.value="444"; |
|||
3
МишельЛагранж
06.11.11
✎
23:58
|
ну тогда header.text.value="444";
... а вообще когда 1С документацию создаст?? |
|||
4
leech001
07.11.11
✎
09:46
|
я пробовал выше использовать код
header.text="444"; вываливается ошибка {Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (text) header.text="444"; как видите он сразу ругается на поле "text" и походу как то правильно ругается если посмотреть код схемы то там вообще нет упоминания про свойство текст :( Однако в самом пакете откуда выгружал оно есть. Наверное текст туда как то передается без указания свойства текст. Но вот как ? Если бы небыло типа "header" то передал бы просто data.header="444"; но так как используется тип то такая запись сразу становится в системе не корректной :( И не дает так произвести внесение данных. |
|||
5
Feanor
07.11.11
✎
09:48
|
Объясните, плз, зачем нужно это XDTO, по простому как-то
|
|||
6
leech001
07.11.11
✎
09:54
|
Для более удобной работы с XML. Как я понимаю если использовать XDTO то мы начинаем работать с XML как просто с объектом то есть абстрагируемся от его там тегов и прочей мути.
Да и вариантов в 1С не особо много как по другому можно. 1. Последовательная работа нативно быстро, но очень геморна в коде. 2. DOM модель тормозная если xml достаточно большой. Она же его весь в память пихает :( ну а 3 тока сраное комбинирование DOM для схемы данных и XDTO чтоб там как объектами манипулировать. Вот я как то так понял эту хреновину. |
|||
7
Feanor
07.11.11
✎
10:16
|
(6) ага, спасибо, получается, это некоторый шаблон для хмл документа.
по сабжу можно попробовать отладчиком посмотреть свойства объектов, мб чего-нить найдется, куда записать 444 нужно. |
|||
8
DmitrO
07.11.11
✎
10:26
|
(6)ну вообще-то, XDTO это тоже все в памяти.
|
|||
9
DmitrO
07.11.11
✎
10:30
|
(6) и кстати, фабрику тебе можно по проще создать так:
Фабрика = СоздатьФабрикуXDTO("d:\3\shema.xsd"); |
|||
10
leech001
07.11.11
✎
10:40
|
DmitrO спасибо за подсказку, просто код из примера брал.
А по делу можете подсказать как мне текст елементу то записать ? |
|||
11
DmitrO
07.11.11
✎
10:46
|
(10)Неа, не могу ничо сказать. Имхо XDTO подразумевает, что текст может существовать только в простом типе, в комплексном типе текста быть не должно.
|
|||
12
DmitrO
07.11.11
✎
11:05
|
Цитата из документации по 8.1 (т.к. документация по XDTO для 8.2 на ИТС отсутствует, видать засекречена, дети-шпионы мля)
Свойства объектов должны представляться в XML только как элементы. Представление свойств как атрибутов XML не влияет на эквивалентность исходной и результирующей схем. Однако имеется ряд ограничений: · в атрибуте не может быть представлено значение объектного типа, - только типов-значений; · в атрибуте не могут быть представлены свойства с множественными значениями; · В случаях полиморфных типов у свойства, представленного как атрибут XML может происходить искажение типа значения. А именно, при присваивании значения свойству тип значения приводится точно к типу свойства, так как только для значения свойства в элементе XML можно указать атрибут xsi:type, который позволяет точно указать тип значения свойства. Как следствие, не надо использовать simpleContent для complexType, так как эта модель подразумевает использование для хранения значений свойств атрибутов и текста включающего элемента XML. |
|||
13
leech001
07.11.11
✎
11:26
|
Вот же блин засада :( "Не надо использовать" а если такой XML заказчик передает и ведь он валидный в плане XML'я :(
Спасибо DmitrO за разъяснения. Одно не понятно, зачем они тогда XDTO сделали если в таком подрезанном варианте оно только для внутренних реализация обмена и годно. |
|||
14
Feanor
07.11.11
✎
11:28
|
(13) 1С-стайл ))))
|
|||
15
DmitrO
07.11.11
✎
11:31
|
(13)XDTO это просто стандарт над стандартом. Сам xml шире чем XDTO. XDTO ограничивает xml.
Получается, что тебе надо использовать DOM. |
|||
16
leech001
07.11.11
✎
12:07
|
DmitrO спасибо так и делал, но решил извратиться и сделать на XDTO. Два дня курил его и вляпался в простейший вроде случай описания XML и не смог его описать с помощью этих фабрик :(
Спасибо всем кто откликнулся на мой проблем .... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |