Имя: Пароль:
1C
 
И снова XDTO
0 alf2006x
 
17.10.24
12:22
Ну, всё,... я сдаюсь.

В поисках решения по внесению изменений в файл xml всё же решил использовать ФабрикуXDTO, как наиболее визуально компактную и удобную.

Вроде задача элементарная, но сделать не могу.

Нужно: в  XML файл "styles.xml", в СписокXDTO ("fonts") добавить такую ветку тега:

	<font>
		<u />
		<sz val="8" />
		<color theme="10" />
		<name val="Arial" />
	</font>


Всё на что меня хватило:

ПутьКФайлуStyles = ВременныйКаталог + "1\xl\styles.xml";

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлуStyles);
ЧтениеXML.ПерейтиКСодержимому();
	
ПутьКФайлуStylesНов = ВременныйКаталог + "1\xl\styles_NEW.xml";
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
	
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФайлуStylesНов,  ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьБезОбработки("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>");
	
URIПространстваИмен = ЧтениеXML.URIПространстваИмен;
styleSheet = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
	
СписокFonts = styleSheet.fonts.font;
AnyType = СписокFonts[0].Тип();
	
НовыйЭлементFont 	= ФабрикаXDTO.Создать(AnyType);

НовыйЭлементU = ФабрикаXDTO.Создать(AnyType);
НовыйЭлементU.Последовательность().Добавить("u");
	
НовыйЭлементFont.Последовательность().Добавить(НовыйЭлементU);

СписокFonts.Добавить(НовыйЭлементFont);
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, styleSheet, "styleSheet", URIПространстваИмен, ФормаXML.Элемент);
ЗаписьXML.Закрыть();


Строка:  НовыйЭлементFont.Последовательность().Добавить(НовыйЭлементU);

вылетает с ошибкой: Несоответствие типов (параметр номер '1')
Понимаю, что это делается как-то не так,.. как-то по-другому, перепробовал всё, что смог понять из XDTO - ничего не проканало. Делаю вывод: из XDTO нифига не понял.

Натолкните на правильный путь,.. ну пажааа-алуста ))
1 Волшебник
 
15.10.24
19:48
Может не нужно...
2 Волшебник
 
15.10.24
19:49
XDTO — это для обмена данными, а не шрифтами.
3 alf2006x
 
16.10.24
10:33
(1) Ну ок.  (2) А как тогда красиво внести изменения в XML ?
4 alf2006x
 
16.10.24
11:31
Чё, прямо ваще без вариантов? ))
5 Волшебник
 
16.10.24
13:32
Не морочьте нам голову. Здесь не нужна фабрика XDTO. Обращайтесь с XML-файлом, как с текстовым.
6 alf2006x
 
17.10.24
12:11
Тема закрыта (вспылил)

Тема открыта

Чтобы в текстовом файле найти нужное место куда вставить вставку, надо написать кучу жуткого G-кода.
А если надо добавить несколько изменений в файл - то со стороны модуля это выглядит как аццкая жесть )

А в XDTO - всё замечательно и читается, и через точку находится и записывается обратно в XML.

Вопрос только с добавлением новых записей.
7 alf2006x
 
17.10.24
12:23
Должен же быть простой способ добавить обычный тег <font> </font> в XDTO.
8 Волшебник
 
17.10.24
12:30
(7) XDTO работает с объектами. Заведите объект font
9 alf2006x
 
17.10.24
13:50
(8) А как завести объект?

Чтобы создать новый объект XDTO (через ФабрикаXDTO.Создать()) мне обязательно нужен либо ТипЗначенияXDTO либо ТипОбъектаXDTO.
А где взять ТипЗначенияXDTO либо ТипОбъектаXDTO я никак не могу понять.
10 Волшебник
 
17.10.24
13:55
Заведите свой справочник "Шрифты"
11 Hmster
 
17.10.24
14:19
(0) ну попробуй посмотреть в сторону "Построитель DOM"
12 alf2006x
 
17.10.24
14:36
(11) Спасибо, попробую
13 alf2006x
 
17.10.24
14:45
Случайно наткнулся на ветку:
Как добавить элемент в ОбъектXDTO

Свой вопрос решил окончательно )