15

カスタム コードではなく RTTI を使用して、Delphi オブジェクト ツリーを XML にシリアル化する良い方法は何ですか?

この機能がすでに Delphi に組み込まれていることを知りたかったのですが、そうではないようです。

この機能を実行する可能性があると思われるいくつかのコンポーネント (以下に投稿) を見つけました。それらのいずれか、または他の製品を使用したことがありますか? 自分で作ったことがありますか?Delphi で明らかな何かが欠けていますか?

4

7 に答える 7

21

JVCL TJvAppXMLFileStorage コンポーネントを使用して、TPersistent 派生クラスをシリアル化できます。

uses
  JvAppXMLStorage;

var
  Storage: TJvAppXMLFileStorage;
begin
  Storage := TJvAppXMLFileStorage.Create(nil);
  try
    Storage.WritePersistent('', MyObject);
    Storage.Xml.SaveToFile('S:\TestFiles\Test.xml');

    Storage.Xml.LoadFromFile('S:\TestFiles\Test.xml');
    Storage.ReadPersistent('', MyObject);
  finally
    Storage.Free;
  end;
end;
于 2008-12-15T16:44:06.197 に答える
15

JVCL は 1 つの選択肢ですが、小さな自己完結型のライブラリを好む場合は、OmniXML (Mozilla Public License 1.1、http: //www.omnixml.com/ ) があります。私はこれをいくつかのプロジェクトでうまく使用してきましたが、Delphi で使用する最も単純な XML ライブラリであることがわかりました。OmniXML には「OmniXMLPersistent」ユニットが付属しており、JVCL ソリューションと同様に、RTTI を介して必要なことを実行します。

// saving:
pers : TPersistent;
// SaveToFile is a class method, so no need to instantiate the object:
TOmniXMLWriter.SaveToFile( pers, 'd:\path\file.xml', pfAttributes, ofIndent );

pfAttributes は、プロパティが XML 要素の属性として格納されることを意味します。ofIndent は、読みやすくするために適切にインデントされたコードを生成します。

// loading:
TOmniXMLWriter.LoadFromFile( pers, 'd:\path\file.xml' ); 
于 2008-12-16T09:27:53.630 に答える
6

DragonSoft の XML クラス シリアライザ

リンク: http://www.dragonsoft.us/delphi_vcl.php

ライセンス: Mozilla Public License (「MPL」) バージョン 1.1 に基づいてライセンス供与

引用: XML 経由で VCL オブジェクト/コンポーネントをシリアライズ/デシリアライズできます。オブジェクトの状態を保存/復元します (公開されたプロパティ)。特別なクラスのサポート - TStrings、TCollection、TPicture。完全なプロセス制御。

于 2008-12-15T16:32:29.780 に答える
5

Simdesign の NativeXml

リンク: http://www.simdesign.nl/xml.html

ライセンス: € 29,95

引用:ネイティブの Delphi XML パーサーおよびライター。独自の機能: 任意の TPersistent オブジェクトを XML との間で直接保存、読み取り、作成します (例 5 を参照)。これは、RTTI (ランタイム型情報) を使用して、オブジェクトの公開されたすべてのプロパティを反復処理することによって行われます。この機能は、D5 以降でのみ使用できます。

于 2008-12-15T16:33:31.587 に答える
4

JVCL の TJvTranslator.ComponentToXML

リンク: http://sourceforge.net/project/showfiles.php?group_id=45786&package_id=42327

ライセンス: Mozilla Public License (「MPL」) バージョン 1.1 に基づいてライセンス供与

観察:再帰的なシリアル化を行っているように見えますが、それが明らかに「翻訳」を目的としているという事実は、私を一時停止させます。

于 2008-12-15T16:31:13.167 に答える
3

SOAP XMLを使用してD2006のシリアライザーを作成しました:http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4! 791.entry

しかし、D2009のジェネリック版もあります。

于 2008-12-16T19:42:05.603 に答える