- - PR -
xerces * c++ でのXML パース
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-04 00:45
xerces * c++ でのXML パースの方法について教えていただけたらと思います.
<a> <b> <c>c1</c> <d> <e>e1</e> <f>f1</f> </d> </b> <b> <c>c2</c> <d> <e>e2</e> <f>f2</f> </d> </b> <b> <c>c3</c> <d> <e>e3</e> <f>f3</f> </d> </b> </a> このようなデータをパースして各値を取得するプログラムはどう記述すればよいのでしょうか? XMLPlatformUtils::Initialize(); XercesDOMParser parser; parser.parse( "sample.xml" ); DOMDocument *doc = parser.getDocument(); DOMNodeList *nodeList = doc->getElementsByTagName("b"); for( int cnt = 0; cnt < nodeList->getLength(); cnt++ ) { DOMNode node = nodeList.item(cnt); } これでタグb まではたどりつけていると思うのですが, c/d/e/f に対して どうアクセスすればよいのか分かりません. どなたかご回答頂けませんでしょうか。。。 [ メッセージ編集済み 編集者: harumaki 編集日時 2005-12-07 15:10 ] | ||||
|
投稿日時: 2005-12-04 23:59
http://xml.apache.org/xerces-c/apiDocs/classDOMElement.html
Functions introduced in DOM Level 1 getElementsByTagName DOMElement木のpreorder横断の中でそれらに遭遇する順に、与えられたタグ名を備えたすべての子孫要素のDOMNodeListを返します。 ELEMENT に対しても getElementsByTagName は使えます。 | ||||
|
投稿日時: 2005-12-06 17:28
ご回答ありがとうございます.
そこでまた疑問なのです. DOMNode をDOMElement でキャストするコードを散見するのですが, nodeList.item(cnt); // 最初の投稿のソース で取得されるDOMNode(親) をDOMElement(子) でキャストしてしまってよいのでしょうか? この操作(キャスト)が理解できていないのが問題になっております。。。 | ||||
|
投稿日時: 2005-12-06 17:37
こんにちは。
(親)(子)とは、基底クラスと派生クラスのことですね? おそらく、getElementsByTagNameで取得したDOMNodeなので、 DOMElementにキャストしても問題ないでしょうが、 (Elementをgetしたんですから) ご心配ならばdynamic_cast(ダウンキャスト)を使用されては、いかがでしょうか? [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2005-12-06 17:41 ] | ||||
|
投稿日時: 2005-12-07 15:30
Tdnr_Sym さん, ご回答ありがとうございます.
>(親)(子)とは、基底クラスと派生クラスのことですね? そのつもりで書いてしまいました. 基底/ 派生が正しいです. なるほど, 確かにDOMDocument.get "Element" ByTagName() ですね. マニュアルの戻りの型しか意識しておりませんでした. ダウンキャストで対処したいと思います. |
1