Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизЗаполнение свойств класса из XML Найти похожие ветки
← →
Альф (2006-01-30 11:36) [0]Доброе утро :) Есть ли у кого модуль заполнения published properties у класса из XML-файла ? при условии что имена тегов в XML соответсвуют именам свойств.
Теоретически знаю что нужно копать в сторону RTTI - но как практически реализовать пока не знаю :( или же подскажите где копать :)
← →
pasha_golub © (2006-01-30 12:40) [1]Если только для паблишед, то можно через TStream. У меня например так:
...
WriteLn(theFile, "<FORMSETTINGS "+
....
"SomeClass=""+ EncodeClass4XML + "" "+
...
function EncodeClass4XML: string;
var SS: TStringStream;
FClassStream: TMemoryStream;
begin
FClassStream := TMemoryStream.Create;
try
SS := TStringStream.Create("");
try
FClassStream.WriteComponent(<SOMEOBJECT>); //Edit1 например
ObjectBinaryToText(FClassStream,SS);
Result := EncodeText4XML(SS.DataString);
finally
SS.Free;
end;
finally
FClassStream.Free;
end;
end;
EncodeText4XML - процедура заменяющаяя non-printable и служебные символы ("<",">","\" etc.) на их "проэскапленные" аналоги.
У этого метода однако есть существенные недостатки. Он не сохранит значения тех свойтсв которые не отличны от их default представлений,
например:
TSomeClass = class
..
published
property Foo ..... default 0;
end;
Так вот, если Foo на момент сохранения равно нулю, то значение не сохранится. В принципе это не страшно, если объект будет создаваться и лишь потом заполняться свойствами из файла. Однако, будут проблемы если объект уже существует и мы пытаемся переписать его новыми значениями. Для этого его лучше пересоздать.
С другой стороны есть несомненный плюс. Ибо метод запишет и все объекты которыми он владеет, так, например если таким образом сохранять форму, то грубо говоря получим аналог .dfm со всеми компонентами лежащими на ней.
Надеюсь идея понятна. могут быть ошибки в коде, ибо перерабатывал из своих внутренностей.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.018 c