Delphi de MSXML(1)

DelphiでXMLを扱う際、一般的にはTXMLDocumentを使用するのですが
XPathが標準で使えなかったりなんだりと本格的に使うにはちょっと骨が折れます。

http://docwiki.embarcadero.com/Libraries/Tokyo/ja/Xml.XMLDoc.TXMLDocument

そこで、MSXMLを直でぶっ叩く方法をメモっておこうと思います。

 

※準備

uses MSXML;

おまじない。

 

適当にButtonとOpenDialog1を配置しておきます。

 

procedure TForm1.Button1Click(Sender: TObject);
var
  xml: IXMLDOMDocument2;
begin
  if OpenDialog1.Execute then begin
    xml := CoDOMDocument.Create;
    xml.load(OpenDialog1.FileName);
    if xml.parseError.errorCode <> 0 then begin
      ShowMessage('パースエラーです');
    end else begin
      ShowMessage(xml.selectSingleNode('//hoge').text);
    end;
    xml := nil;
  end;
end;

 

雑ですが、こんな感じに書きます。
load -> parse -> text取得のシンプル仕様。
TXMLDocumentだとパースエラーは例外で返ってきますが
MSXMLの直叩きだとparseError.errorCodeで持って来ないと
拾えないので注意。

 

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xml" href="testxml.xml"?>
<niceboat>
 <hoge>hogeho!</hoge>
</niceboat>

こんな感じの適当なXMLを読んであげると、

 

ノード内のテキストをXPathで簡単に取得することが出来ました。

 

XPathはここらへんのリファレンスを参考にしながら…

https://msdn.microsoft.com/ja-jp/library/ms256086(v=vs.120).aspx

 

 

ちょっと先にXMLDocumentを使ってると扱い方が違う部分もありますが、
処理が速いのとXPathを使って色々出来るので重宝しています。

それはそうと、解放ってxml := nil; で本当にいいのかな…?
海外フォーラムではそれっぽく書いてたけど…

http://www.delphigroups.info/2/ca/169397.html

 

気が向いたら(2)あたりでいろいろな使い方を備忘録的に書いてみようかと。

 


OBJECT PASCAL HANDBOOK―マルチデバイス開発ツールDelphiのためのプログラミング言語完全ガイド
マルコ カントゥ
カットシステム
売り上げランキング: 455,774

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)