- - PR -
MSXMLのDOMにおける検索
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-20 14:50
こんにちは、始めまして。
タガと申します。宜しくお願いします。 質問なんですが MSXMLを使ってXMLのタグを読み込むプログラムを作っているんですが、 Tree構造のように扱って読み込もうと思ったんですが、 その場合ってある程度子ノードの大きさがわからないといけないですよね? そこをうまく子ノードの階層(表現がおかしいかもしれません)の深さに関係なく読み込めるように作れる方法ってのはないでしょうか? MSDNなどで確認しても、子ノードの階層がある程度決まってるものしか扱っていない気がして・・・。 簡単なサンプルのxmlファイルとして http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/967ffc8d-a7f3-4630-ae77-ad87588cd400.asp を使ってみました。 <catalog> <book id = "bk101"> <author> etc <book id = "bk102"> <author> etc ですよね。これだと子ノードの階層1がbook,2がauthor,etcと自分では考えて for文を2回繰り返せばそれぞれのitemを得られるんですが、それ以上の階層や未知の階層の時はどのようにプログラムを組んだらよろしいのでしょうか? あと、bookの属性値を指定してそのbookのエレメントのみ(例えば、bk101のbookエレメントのみとか)をgetElementsByTagNameとかとうまく組み合わせて得られるってことは可能なのでしょうか?getElementsByTagNameでうまく調節することができるのでしょうか?domdocumentとdomelement版があるので(違いをMSDNで確認してもちょっと理解ができなかったんですが) 最後なんですが、 import ”msxml4.dll"をする際に" raw_interfaces_onlyを指定したいんですが、 自分の環境だとこれを入れると MSXML2::IXMLDOMNodePtr pAttr1;などがメンバではないとエラーがでてしまいます。 それはなぜなんですか? 初心者でちょっとわからないとこだらけで、すみません。 調べては見たのですが、どうしてもわからない為に質問させていただきました。 どうぞ宜しくお願いします。 開発環境 MSXML(msxml4.dll)、VC++.NET、winXP Win32コンソールアプリケーション | ||||
|
投稿日時: 2006-10-20 15:12
XPathをまずは、勉強しましょう!
http://www.w3.org/TR/xpath 探せば、日本語の解説サイトも見つかるでしょう。 ちなみに、XPathはMsXml 2.6から使えるらしいです。 | ||||
|
投稿日時: 2006-10-20 16:11
早速お返事ありがとうございます。
はい、XPath勉強します!。 ありがとうございます。 | ||||
|
投稿日時: 2006-11-10 18:57
getElementsByTagNameを使えば文書構造をたどらずに指定した要素名の
ノードのリストが得られます。 DOMDocument坂では文書全体から、DOMElement版なら自身の子孫ノードから 検索します。 文書構造が定義されていて特定のノードを一発でとるにはXPathで パターンを指定するのが楽ですね。 MSXMLにはそのためのメソッドselectNodesやselectSingleNodeがありますが、 これらはW3CのLDOM標準からはずれることは知っておきましょう。 #HTMLのDOMならid属性getElementByIdなんてメソッドもありますが。
要は開発環境とMSXML同士のバージョンの相性の問題です。 これを解決するよりも、VC++.NETで開発しているなら、msxml4.dllではなく、 すなおに.NETフレームワークのSystem.Xmlを使いましょう。 というよりXML/DOM のお勉強だけならC++よりもVBSやJavaScriptをお勧めします。 | ||||
|
投稿日時: 2006-12-29 16:18
返答が遅くなってしまい申し訳ないです.
>カンタさん とても勉強になります. あの頃質問させていただいたときはC++でXMLを 扱わなくてはいけなかったんですが,なぜか今はVB.netになっています. ご指摘いただいたとおり,今MSXMLではなく,System.XMLで勉強しております. とても親切に答えていただきありがとうございます. |
1