Имя: Пароль:
1C
1С v8
Как добраться до значения элемента XDTO
0 МастерВопросов
 
02.01.16
11:49
есть элемент файла XML такой структуры:

<stylesheet type="222">333</stylesheet>

как добраться до через объектXDTO "333"?

читаю файл с помощью Фабрики:
    МойXML = Новый ЧтениеXML;
    МойXML.ОткрытьФайл(СокрЛП(ПутьКФайлу));
    
    НашаКнига = МояФабрикаXDTO.ПрочитатьXML(МойXML);
    МойXML.Закрыть();


в итоге "НашаКнига.stylesheet" видит свойство "type" форма = атрибут и всё. Свойства "__content" форма = текст (так я его описал в пакете) нигде нет.
Как мне получить значение элемента = "333" ?!!

Год назад парень такой же вопрос задавал, так толком ничего и не ответили.
v8: Как добраться до элемента XDTO
1 МастерВопросов
 
02.01.16
11:50
как добраться до "333" через объектXDTO?
2 МастерВопросов
 
02.01.16
11:54
создавал файл так:

    Типstylesheet = Типqqq.Свойства.Получить("stylesheet").Тип;
    Объектstylesheet = МояФабрикаXDTO.Создать(Типstylesheet);    
    
    Объектstylesheet.type = "222";
    Объектstylesheet.__content = "333";
    

    
    МояФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НашаКнига, "5555");
    
    ЗаписьXML.Закрыть();
3 vde69
 
02.01.16
11:55
я где-то здесь давал код как парсить сайты, поищи...
4 vde69
 
02.01.16
11:57
5 МастерВопросов
 
02.01.16
11:57
(3) я уже весь форум перерыл...
напиши конкретный пример, плс.
6 МастерВопросов
 
02.01.16
11:59
(4) там с помощью ПостроительDOM, а мне нужно через объектXDTO
7 vde69
 
02.01.16
12:00
8 vde69
 
02.01.16
12:00
(6) какая разница?
9 МастерВопросов
 
02.01.16
12:03
(8) ну типа я в конфигураторе структуру пакетов XDTO описал, с помощью них записываю файл. Логично с помощью них и читать, а не перебором через ПостроительDOM, или ЧтениеXML.
10 hhhh
 
02.01.16
12:20
ну ты же добавил этот элемент через задницу, почему должно прочитать?
11 МастерВопросов
 
02.01.16
12:26
(10) через какую задницу? Ровно через тот пакет XDTO, через который и пытаюсь прочитать
12 vde69
 
02.01.16
12:27
фабрика хороша для сериализации, то есть с типами которые 1с понимает.

Если хочешь что-то нестандартное - то или хмл читай и разбирай как дерево или используй дом (то-же как дерево),

а вот как объект и не должно работать
13 vde69
 
02.01.16
12:30
в твоем случае тебе в самом пакете хдто (в конфигураторе) нужно добавить свойство а не в коде
14 МастерВопросов
 
02.01.16
12:31
(12) ну так "__content" это свойство объекта "stylesheet", почему с ним нельзя через объект работать?
15 МастерВопросов
 
02.01.16
12:32
(13) я в конфигураторе и описал свойство "__content" форма = текст. При записи его и использую.
16 vde69
 
02.01.16
12:35
сообщить(СокрЛП(НашаКнига.__content))


ошибку генерит или "неопределено"
17 МастерВопросов
 
02.01.16
12:37
(16) ошибку
18 МастерВопросов
 
02.01.16
12:37
19 МастерВопросов
 
02.01.16
12:39
(16) НашаКнига.stylesheet.__content    
{(1)}: Поле объекта не обнаружено (__content)
20 МастерВопросов
 
02.01.16
12:43
21 vde69
 
02.01.16
12:44
а в файле свойство есть? может проблема не с чтением а с записью?
22 vde69
 
02.01.16
12:45
так ты тип поля не определил :))))
23 МастерВопросов
 
02.01.16
12:45
(21) да,см.(0)
24 МастерВопросов
 
02.01.16
12:46
(22) пробовал разные типы и стринг, и энисимплтип и вообще убрать - результат один и тот же, см.(20)
25 vde69
 
02.01.16
12:52
вот это у тебя неправильно

    Объектstylesheet.type = "222";

по этому при чтении свойство пропускается...

сделай так,
в конфигураторе определи тип как строка, а в коде вообще ничего не присваивай,

на строке "    Объектstylesheet.__content = "333";"
остановись и посмотри чему равен тип и значение "Объектstylesheet.__content" до записи и после
26 Serginio1
 
02.01.16
12:52
27 МастерВопросов
 
02.01.16
14:16
(25) установил у "__content" такой тип: anySimpleType (http://www.w3.org/2001/XMLSchema)

строку "//Объектstylesheet.__content = "3b33";"  закооментил, после записи "МояФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НашаКнига, "555");"
Объектstylesheet.__content возвращает значение = пусто, тип = неопределено

http://s006.radikal.ru/i215/1601/07/92007ccf6fdf.jpg
28 МастерВопросов
 
02.01.16
14:20
(26) О! Наконец то! Огромное спсибо!
XDTO атрибуты и свойства

"обРез.Msg[0].Последовательность().ПолучитьТекст(0)"
29 МастерВопросов
 
02.01.16
14:26
кстати, а что такое "Последовательность" ?

ОбъектXDTO.Последовательность (XDTODataObject.Sequence)
ОбъектXDTO (XDTODataObject)
Последовательность (Sequence)
Синтаксис:

Последовательность()
Возвращаемое значение:

Тип: ПоследовательностьXDTO.

Описание:

Получает последовательность объекта.

Доступность:

Тонкий клиент, сервер
30 МастерВопросов
 
02.01.16
14:37
"XDTO
Механизм XDTO позволяет создать модель представления данных (модель типов и значений), которая, с одной стороны, обеспечивает возможность просто и естественно манипулировать данными в среде 1С:Предприятия 8,"


это они (28) называют "просто и естественно"? Я себе чуть мозг не вывернул пока получил значение. И так, кстати, и не понял что за "последовательность" такая загадошная - вложенные в объектXDTO элементы XML что ли?
31 Записьдампа
 
02.01.16
15:32
(11) Через обыкновенную, которая приключений ищет.

Зачем тебе "__content", если это обычный тип - stylesheet в форме элемента строкового типа, у которого есть подчинённый type в форме атрибута?
32 МастерВопросов
 
02.01.16
16:01
(31) и как по твоему без свойства "__content" записать "333" внутрь элемента как в (0)?
33 Записьдампа
 
02.01.16
20:27
(32) Дней через 5 отвечу, как до 1С доберусь.
34 Serginio1
 
03.01.16
10:24
(32) Ну это же очевидно.
ПоследовательностьXDTO (XDTOSequence)
Добавить (Add)
Вариант синтаксиса: Добавить текст

Синтаксис:

Добавить(<Текст>)
Параметры:

<Текст> (обязательный)

Тип: Строка.
Текст, добавляемый в последовательность.
Вариант синтаксиса: Добавить значение

Синтаксис:

Добавить(<Свойство>, <Элемент>)
Параметры:

<Свойство> (обязательный)

Тип: СвойствоXDTO.
Свойство, значение которого добавляется в последовательность.
<Элемент> (обязательный)

Тип: ЗначениеXDTO; ОбъектXDTO; Неопределено.
Элемент данных XDTO, добавляемый в последовательность.

А вот описание последовательности вообще нет.
Нет и примеров.
35 МастерВопросов
 
03.01.16
11:18
(34) я уже пробовал "Объектstylesheet.Последовательность().Добавить("444"); "

выдаёт ошибку, т.к. Объектstylesheet.Последовательность() = неопределено
36 Serginio1
 
03.01.16
11:32
А описание аналогично Получить значение объекта XDTO

<xs:extension base="xs:string">
37 Serginio1
 
03.01.16
12:21
Кстати если в конфигураторе создать объект и добавить свойство (Свойство1) с Форма текст схема будет
<xs:complexType name="ТипОбъекта1">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:sequence>
                    <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attribute name="Свойство2" type="xs:string" use="required"/>
                <xs:anyAttribute namespace="##any" processContents="lax"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

И к нему можно обратиться как Свойство1
38 Serginio1
 
03.01.16
12:23
Там еще добавлено свойство последовательный истина
39 МастерВопросов
 
08.01.16
05:21
(33) прошло пять дней!
40 МастерВопросов
 
11.01.16
14:28
(33) прошло девять дней!
41 Широкий
 
11.01.16
14:35
Об_Элемент.Последовательность().ПолучитьТекст(0);
42 МастерВопросов
 
12.01.16
15:38
(41) Спасибо, но с этим мы разобрались в (28)
Сейчас речь идет о обратном - как записать этот текст в элемент XML, через объект XDTO, если тот не имеет атрибута с формой "текст" в описании пакета XDTO.  
з.ы.: "Последовательность" появляется только после записи ЗаписьXML.