Home / MSXML

MSXML

1度使った経験が有っても時が経つと忘れていてメンドイ orz
書き残しておかねば...

参考資料

MSDN を読むに限る。Platform SDK ドキュメントに英文が有る。価値が無いのか使う人が少ないのか、日本語訳は見かけない。

#import <msxml6.dll>

と書けばタイプライブラリを読んで msxml6.tlh と msxml6.tli なんてのが作られる。h と i はヘッダーとインラインの略だろう。ドキュメントと共に、これを丹念に見ると良い。

後、馴染み薄い comutil.h ... _bstr_t, _variant_t
COMDEF.H ... _COM_SMARTPTR, _com_error, ...
VARIANT マクロを書くなら OleAuto.h なんかにも目を通さないとコード書くのに苦労する。

因みに _variant_t は文字列の連結を始め編集は出来ず、せいぜい比較機能位しか無いので、XML を扱う場合は operator _bstr_t() で _bstr_t へ置き換える事が多くなると思う。

ネームスペース付きのタグを読む

これだけ xml は有り触れているのに、判り難いので困った orz
ググってヒントを得ると setProperty で指示せよだと。

oDomDocument.setProperty("SelectionNamespaces", 
    "xmlns:example1='http://myserver.com' xmlns:example2='http://yourserver.com'");

load で読み込んでんだからテメェが判ってんだろう、と思うのだが...
selectNodes Method の説明なんかに XPath がどうのこうの書いてあるが、"SelectionNamespaces" のスペルは見当たらず。

XML ファイル間でデータをやりとりする

IXMLDOMDocument3::IXMLDOMNodePtr importNode(struct IXMLDOMNode * node, VARIANT_BOOL deep);

が有効。この node は別の DOM のノードを指定出来る、と言うか、自身でノード働くのか知らない。
MSXML5 か 6 辺りから使えるようだ。IXMLDOMDocument3 は2つのメソッドしか持たないしね。
この Raw methods の定義を見ると

virtual HRESULT __stdcall 
raw_importNode(struct IXMLDOMNode * node,
               VARIANT_BOOL deep,
               struct IXMLDOMNode * * clone) = 0;

clone なんて引数名から推察するに便利なラッパーに過ぎないのかも知れない。


Home / MSXML
© 2008 usskim    http://usskim.web.fc2.com/
inserted by FC2 system