「XML ファイルを ini ファイルのように使うには?」と同じタイトルで
とある掲示板に投稿してヒントをもらって解決したので自分のブログにも書いておく。
まだ読み込み方法を調べないといけないんですけどね・・・。
それにしてもXMLファイルに書き込めるようになるまで時間が掛かったなぁ・・・。
日本語サイトだけの解決は厳しかった・・・。
以下の方法はXE1以降で使えます。
2013年3月2日 追加:
この記事を書いた翌日に質問した掲示板に追加の返答があったのを見て追加しました。 // 実行結果は同じですがちょっとスマートになったかとw
uses に
XMLIniFile を追加して
フォームに XMLDocument (これがないと実行時にエラーになる)を貼付けて
XMLIntf と XMLDoc も uses に追加して
以下のようなソースを書いてXMLファイルをiniファイルのように出来ました。
改変前:
procedure TForm1.Button1Click(Sender: TObject);
var
Root : TXMLDocument;
settingsXML: TXMLIniFile;
RootTag : string;
SaveFolder: string;
begin
// XMLiniファイルに書き込む。
Root := XMLDocument1; // XMLDocument1の名前を変更した時の影響を減らすため。
RootTag := ExtractFileName(ChangeFileExt(Application.ExeName, ''));
Root.XML.Text := '<' + RootTag + '></' + RootTag + '>'; // XMLのルート部分をEXEファイル名に
Root.Options := [doNodeAutoIndent]; // オートインデントをON
Root.Active := True; // Active を True にしないと書き込まれない
settingsXML := TXmlIniFile.Create(Root.DocumentElement);
try
settingsXML.WriteInteger('Form', 'Width' , Form1.Width );
settingsXML.WriteInteger('Form', 'Height', Form1.Height );
settingsXML.WriteString('Path', 'TempSaveFolder', SaveFolder);
Root.SaveToFile(ChangeFileExt(Application.ExeName, '.xml')); // 書き込み実行
finally
settingsXML.Free;
end;
end;
質問した掲示板を見て2013年3月2日 改変:
procedure TForm1.Button1Click(Sender: TObject);
var
Root : IXMLDocument;
SettingsXML: TXMLIniFile;
RootTag : string;
SaveFolder: string;
begin
// XMLiniファイルに書き込む。
RootTag := ExtractFileName(ChangeFileExt(Application.ExeName, ''));
Root := NewXMLDocument();
Root.AddChild( RootTag ); // XMLのルート部分をEXEファイル名に
Root.Options := [doNodeAutoIndent]; // オートインデントをON
Root.Active := True; // Active を True にしないと書き込まれない
SettingsXML := TXmlIniFile.Create(Root.DocumentElement);
try
SettingsXML.WriteInteger('Form', 'Width' , Self.Width );
SettingsXML.WriteInteger('Form', 'Height', Self.Height );
SettingsXML.WriteString('Path', 'TempSaveFolder', SaveFolder);
Root.SaveToFile(ChangeFileExt(Application.ExeName, '.xml')); // 書き込み実行
finally
SettingsXML.Free;
end;
end;
で Button が押されて保存される XML ファイルは以下のようになります。
<Project1>
<Form>
<Form Name="Width">651</Form>
<Form Name="Height">338</Form>
</Form>
<Path>
<Path Name="TempSaveFolder"></Path>
</Path>
</Project1>
- Root.Options の行を削除すると1行の XML ファイルになる。
- TempSaveFolder というか SaveFolder には何も指定されていないので空になっている。
- 書き込む時に WriteInteger や WriteString などで型を決めるので型変換する手間がなさそう。
- try~finally が必須なのか、どうかわからない・・・。
なくても書き込めた気がするけど安全なのか教えて欲しいです。
XML ファイルを ini ファイルのように使うには? (読み込み編) に続く。