Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
11-1120596444
micron
2005-07-06 00:47
2006.03.05
Не читается из ini-файла, не рисуется иконка...


15-1139490279
AlterEgo of WondeRu
2006-02-09 16:04
2006.03.05
Холода, надо согреваться - Новая Samara Mastak Party!!!


2-1139979251
Risk
2006-02-15 07:54
2006.03.05
Глюк ADODataSet


3-1136388938
АндрейЙ
2006-01-04 18:35
2006.03.05
Как подключить БД написанную на Firebird к Delphi?


15-1139750938
Интересующийся
2006-02-12 16:28
2006.03.05
Ограничение числа подключений к компу в реестре





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский