Имя: Пароль:
1C
1C 7.7
v7: Чтение из XML шаблона и запись в XML
0 D_Pavel
 
12.03.12
11:19
Есть шаблон типа:

<Документ>
<Реквизит/>
<Строка>
<Реквизит/>
<Реквизит/>
<Реквизит/>
</Строка>
<Документ>

Нужно получить выходной файл по этому шаблону но с несноклькими строками, типа:

<Документ>
<Реквизит/>
<Строка>
<Реквизит/>
<Реквизит/>
<Реквизит/>
</Строка>
<Строка>
<Реквизит/>
<Реквизит/>
<Реквизит/>
</Строка>
<Документ>

Делаю так:

ОбъектXML2 = СоздатьОбъект("Msxml2.DOMDocument.4.0");
ОбъектXML2.Load(ИмяШаблона);
узелДокумент    = ОбъектXML2.selectSingleNode("//Документ");
узелСтрока    = узелДокумент.selectSingleNode("//Строка");
узелДокумент.appendChild(узелСтрока);
узелДокумент.appendChild(узелСтрока);
узелДокумент.appendChild(узелСтрока);
узелДокумент.appendChild(узелСтрока);

Но не получается сделать выходной файл с несколькими строками заполненными реквизитами, делается только одна строка с реквизитами. Но если вместо:
узелСтрока    = узелДокумент.selectSingleNode("//Строка");
делать так:
узелСтрока    = ОбъектXML2.CreateNode("Строка");
узелДокумент.appendChild(узелСтрока);
То создаются строки без реквизитов.

Как проще всего создать несколько строк с реквизитами, используя шаблон?
1 Ёпрст
 
12.03.12
11:50
2 Ёпрст
 
12.03.12
11:59
3 D_Pavel
 
12.03.12
12:40
(1) Спасибо. Сделал через cloneNode
4 andrewks
 
12.03.12
13:05
(3) не нужно тут никаких cloneNode. ты в (0) тупо несколько раз вставляешь один и тот же объект, поэтому он у тебя и один. логично, не правда ли?
5 D_Pavel
 
12.03.12
13:11
(4) Почему тогда cloneNode не нужно? Делаю копию и вставляю. логично, не правда ли?
6 andrewks
 
12.03.12
13:13
(5) не, ну понятно, что можно по-разному делать.
непонятно, чем createElement() не угодил
7 D_Pavel
 
12.03.12
13:51
(6) Тем что в новом созданном элементе нет дочерних элементов которые есть в исходном элементе.
8 andrewks
 
12.03.12
17:13
(7) а-а-а, ясно. лень - великая сила )
9 D_Pavel
 
13.03.12
06:24
(8) Если делать оптимально - означает лениво, тогда да: я - самый ленивый человек.
10 andrewks
 
13.03.12
08:20
(9) ну, если уж так глубоко смотреть, то использование DOM-модели изначально неоптимально. лучше всего использовать последовательные чтение/запись
11 D_Pavel
 
13.03.12
08:28
(10) Что-то ты всё наоборот написал.
12 andrewks
 
13.03.12
09:00
(11) не, это не я наоборот написал, это ты наоборот смотришь. оптимально - это не как быстрее и удобней тебе (то бишь программеру), а как быстрее и с оптимальным использованием  памяти для ВМ.
скажем так, оправданна оптимизация Время_выполнения Х Используемая_память

использование ДОМ-модели, несомненно, очень удобно для программиста, но очень часто проигрывает по времени выполнения прямой записи, и практически всегда - по используемой памяти
13 D_Pavel
 
13.03.12
10:46
(12) Ты снова не правильно пишешь. Я делаю оптимально в общем, со всех сторон, а не только с точки зрения использования памяти и процессора ЭВМ. Для оценки оптимальности я использую такую формулу:
Время подготовки программы программистом * цена работы программиста + время работы оператора с программой * цена работы оператора.