Delphi XE Pro - XML ファイルの値を変えてファイルに書き込む。
Delphi XE Pro - XMLファイルの値取得がわからない 【"略"を変更】

例えば以下のようなXMLファイルがあったとする。
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description>
<em:description>ソフト説明</em:description>
<em:name>テスト</em:name>
<em:version>0.0.1</em:version>
</Description>
</RDF>

これのノードの<em:version>0.0.1</em:version>の値を書き変えたい場合にどうするのかすぐにわからなかったのでメモ。
procedure TForm2.Button3ArrangeClick(Sender: TObject);
const
NamespaceURI: string = 'http://www.mozilla.org/2004/em-rdf#'; // 検索するノードの名前空間(xmlns:emの値)
NodeName: string ='name';
NodeVer : string ='version';
var
FileName : string;
XMLDocument1: IXMLDocument1;
XMLNode, XMLNodeVerData: IXMLNode;
MemoString, ReleaseVerData: string;

begin
Memo1.Text:='';
Memo2.Text:='';

if OpenDialog1.Execute then
begin
FileName := OpenDialog1.FileName;
Form2.Caption := FileName;

XMLDocument1 := LoadXMLDocument1(FileName);

for MemoString in XMLDocument1.XML Do // 読み込んだファイルを
Memo2.Lines.Add(MemoString); // 表示する

XMLNode := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes.FindNode(NodeName, NamespaceURI);
if XMLNode = nil then
begin
XMLNode := XMLDocument1.documentElement.ChildNodes.First.AttributeNodes['em:' + NodeName];
if not (XMLNode = nil) then
Memo1.Lines.Add(XMLNode.NodeValue)
else
begin
Memo1.Lines.Add('--Not Found--');
end;
end
else
begin
// version 探索
XMLNodeVerData := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes.FindNode(NodeVer, NamespaceURI);
ReleaseVerData := VarToStr(XMLNodeVerData.NodeValue);
ReleaseVerData := '0.1.0_Rev002';
XMLNodeVerData.NodeValue := ReleaseVerData;
// XMLDocument1.SaveToXML(ReleaseVerData); // 必要?
try // ファイルが他のソフトで開かれている場合のためにtryでの実行は必須
XMLDocument1.SaveToFile(FileName); // 更新実行
except on E: Exception do
MessageDlg('install.rdf に対するエラー:'+#13#10+ // 例外メッセージを表示
E.Message, mtError, [mbOK],0);
end;

Memo1.Lines.Add(XMLNode.NodeValue);
end;
end;
end;

SaveToXML と SaveToFile の違いがよくわからない(´・ω・`)

註1:
 本当は「Document1.」や「XMLDocument1.」の「1」は不要なのですが
 エキサイトブログのセキュリティの関係で投稿不可になるので「1」を付けて記事を投稿しました。
註2:
 公開用に編集するのが面倒なので使っているソースコードをそのままupしました。
[PR]

by arigayas | 2013-05-25 19:54 | Delphi Programming | Trackback | Comments(0)
トラックバックURL : http://arigayas.exblog.jp/tb/20495557
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
<< Delphi XE Pro -... サクラエディタ 2.0.8.0... >>