最近DelphiとLazarusの両方で使用できるため、OmniXMLの使用を開始しました。OmniXMLとDelphi独自のXMLライブラリ間でコードを変換するにはどうすればよいですか?
私自身はXMLについては初心者ですが、これは私がいくつかのことを学び、すでにやっているかもしれない悪いことを避けることを望みます。私はリファレンスとして持っている別の質問を使用するつもりです。このため
:bummiによって答えの一つでSaving and Loading Treeview using XML
を、私は彼が、私はラザロにOmniXMLを使用していますDelphiで標準XMLを使用していると思います彼の答えに投稿したコードはコンパイルされませんでした。私はそれがコードの一部を変更した後、今働いていますが、私は以下のが正しいかどうかを知る必要があります。
(1)変数の型
デルファイ
TTreeToXML = Class
private
FDOC: TXMLDocument;
FRootNode: IXMLNode;
OmniXML
TTreeToXML = Class
private
FDOC: IXMLDocument;
FRootNode: IXMLElement;
(2)XML文書
デルファイ
FDOC := TXMLDocument.Create(nil);
OmniXML
FDOC := CreateXMLDoc;
の作成
(3)XML文書を解放
デルファイ
if Assigned(FDOC) then
FDOC.Free;
OmniXML
私は文書を解放する方法を見ることができませんか?
(4)
デルファイ
Procedure TTreeToXML.WriteNode(N: TTreeNode; ParentXN: IXMLNode);
var
CurrNode: IXMLNode;
Child: TTreeNode;
begin
CurrNode := ParentXN.AddChild(N.Text);
CurrNode.Attributes['NodeLevel'] := N.Level;
CurrNode.Attributes['Index'] := N.Index;
Child := N.getFirstChild;
while Assigned(Child) do
begin
WriteNode(Child, CurrNode);
Child := Child.getNextSibling;
end;
end;
OmniXML
Procedure TTreeToXML.WriteNode(N: TTreeNode; ParentXN: IXMLNode);
var
CurrNode: IXMLNode;
Child: TTreeNode;
begin
CurrNode := ParentXN.AddChild(N.Text);
CurrNode.Attributes.SetValue('NodeLevel', IntToStr(N.Level));
CurrNode.Attributes.SetValue('NodeIndex', IntToStr(N.Index));
Child := N.getFirstChild;
while Assigned(Child) do
begin
WriteNode(Child, CurrNode);
Child := Child.getNextSibling;
end;
end;
属性
(5)オプション
デルファイ
FDOC.Options := FDOC.Options + [doNodeAutoIndent];
OmniXML
ドキュメントを自動的にインデントで保存され、私は任意のオプションを見つけることができませんか?
(6)アクティブ
デルファイ
FDOC.Active := true;
OmniXML
私は、TrueまたはFalseにそのようなプロパティを設定する手立てを見ていませんか?
(7)エンコーディング
デルファイ
FDOC.Encoding := 'UTF-8';
OmniXML
が再び私はそのようなオプションを参照してくださいか?
基本的に私はDelphi XMLとOmniXMLの実装の違いを知りたいと思います。
変更が正しいかどうかを確認しましたか?
オプションやエンコーディングなどのプロパティが見つからない場合は、OmniXMLでどのように実装しますか?
ありがとうございました。
私は「MSXML」標準とは呼ばず、Delphi独自のものでもありません。それはウィンドウズ/マイクロソフト自身のAPIです。 Windows MS XML DLLのラッパーはこのボックスに含まれていますが、「MSXML APIに変換する」と言うだけでは間違いありません。 –
@WarrenP私はあなたの要点を見ていますが、ユニットにはデルファイが標準装備されているため、Delphiのものとしてそれを参照していると思います。 –