Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Заполнение свойств класса из 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.034 c
2-1140079194
HF-Trade
2006-02-16 11:39
2006.03.05
Как узнать состояние кнопки мыши без хука.


2-1140364604
JEK2
2006-02-19 18:56
2006.03.05
Как сделать регистронезависимую выборку в БД


2-1140293509
49 Cent
2006-02-18 23:11
2006.03.05
Как перенсти данные из одного Adotable в другой Adotable?


2-1140012790
Id
2006-02-15 17:13
2006.03.05
comboBox1.Style:=csDropDownList


2-1140356030
_shark_@list.ru
2006-02-19 16:33
2006.03.05
Уважаемые мастера, подскажите пожалуйсто, как можно прочитать из