- PR -

属性を取得したい

投稿者投稿内容
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-08-13 08:12
MSXML(msxml4.dll)、VC++6.0(SP5)、win2000

まずはじめに、本件マルチポストとなることをお詫びいたします。
http://forums.belution.com/ja/xml/000/000/57.shtml
#投稿数少なく、解決しそうになかったので。

さてさて、
<MYTAG x="100" y="200" z="300"/>の場合、「100」「200」「300」
をそれぞれ取得するにはどうしたらよいのでしょうか?
(xmlファイルは、setAttributeで出力したものです)

http://forums.belution.com/ja/xml/000/000/04.shtml
http://forums.belution.com/ja/xml/000/000/16.shtml
を参考にしたのですが、
map->getNamedItem( name, &pAttrNode );
のところで下記のコンパイルエラーが発生してしまいます。(VC++6.0)
「error C2660: 'getNamedItem' : 関数が不正な 2 個の実引数をともなって呼び出されました。」

原因、ご存知のかたアドバイスお願いいたします。
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-08-15 17:22
本件、原因ご存知の方はいらっしゃいませんか?

至急XMLに対応しなければならなくなってしまいました。
#属性の読込ができないのであれば、エレメントに変更??

もし、ヒントでもあればよろしくお願いいたします。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-08-15 17:37
MSXMLは使った事ありませんが、お急ぎみたいなので質問を見た時に思ったちょっとした疑問を。
引用:

<MYTAG x="100" y="200" z="300"/>の場合、「100」「200」「300」
をそれぞれ取得するにはどうしたらよいのでしょうか?
(xmlファイルは、setAttributeで出力したものです)


getAttributeとか、get_attributeという感じのメソッドありませんか?
(普通は、set=設定する get=取得する という感じでメソッドが決まっているのでリファレンスを見るまでも無く勘でメソッドを使ってみると大抵使えたりします。エラーが出てもそのエラーを見れば、メソッド自体が無いのか引き数が間違っているのかのヒントが出てますし。)
(てか、「xmlファイルは、setAttributeで出力したものです」というのが何を意味しているか分かりませんので大外ししてるかも^^;)
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-08-15 18:11
冬寂さん、早速のレスありがとうございます。

引用:

getAttributeとか、get_attributeという感じのメソッドありませんか?
(普通は、set=設定する get=取得する という感じでメソッドが決まっているのでリファレンスを見るまでも無く勘でメソッドを使ってみると大抵使えたりします。エラーが出てもそのエラーを見れば、メソッド自体が無いのか引き数が間違っているのかのヒントが出てますし。)
(てか、「xmlファイルは、setAttributeで出力したものです」というのが何を意味しているか分かりませんので大外ししてるかも^^;)



get_attributes()というメソッドはあります。
サンプルでは、get_attributes()→getNamedItem()→get_nodeValue()
を使って属性を取得していたのですが、getNamedItem()のところで、
コンパイルエラーとなってしまっている状況です。

エラーとしては、引数の数が間違っているようで、
引数には属性の名称だけを指定するんではないかという事はわかったのですが、
その後どうしていいものやら・・・
色々検索してみても、XSXML+VCを使ったもので、引数が一つのものなどなく
途方にくれているしだいです・・・
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-08-15 18:35
引用:

get_attributes()というメソッドはあります。
サンプルでは、get_attributes()→getNamedItem()→get_nodeValue()
を使って属性を取得していたのですが、getNamedItem()のところで、
コンパイルエラーとなってしまっている状況です。


たぶん、これ
(「getnameditem c++」で検索した結果)

#たぶん、C++を入れたディレクトリのincludeに色々なヘッダが入っているので暇なら読んでみると色々勉強になると思う。
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-08-15 19:37
冬寂さん、レスありがとうございます。

引用:

たぶん、これ



折角探していただいたのですが、実はその親のスレ(http://forums.belution.com/ja/xml/000/000/16.shtml)を
参考にしていまして・・・
getNamedItem()の後に、
pAttrNode->get_nodeValue( &val );
としているのですが、
getNamedItem()の引数が1つとなると、「pAttrNode」の値は
どうやって設定されるのだろうかという疑問も残っていたり・・・
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-08-15 20:42
最初に言っておいたように、MSXMLは使った事無い(というより、Visual C自体使った事無いので)これ以上力になれないと思いますが、気づいた事だけ。
引用:

pAttrNode->get_nodeValue( &val );
としているのですが、
getNamedItem()の引数が1つとなると、「pAttrNode」の値は
どうやって設定されるのだろうかという疑問も残っていたり・・・


こういう時こそ、リファレンスの出番なのでは?
後、参考記事の所に、
引用:

で、実際にC++で使う場合には、
BSTRラッパ文字列クラスを使ってしまうと楽だと思います。
map->getNamedItem(_bstr_t(L"属性名"))
または、
map->getNamedItem(CComBSTR(L"属性名"))
ちなみに、'L' は、ユニコード文字列を表します。


と書いてあった箇所は試してみましたか?
(たぶん、CとC++の違いが関数の引き数の違いに表れているのだと思う。)
(どういうトリックを使って同じ関数をCとC++で使ってるのか?とかは、ヘッダ見ると分かる・・・はず。)
(ごちゃごちゃしてるので、慣れるまで時間かかると思うけど。)
未記入
常連さん
会議室デビュー日: 2005/07/04
投稿数: 31
投稿日時: 2005-08-15 20:47
$ cat msxml1.cpp
#include <msxml2.h>
int main(){
IXMLDOMNamedNodeMap* map;
BSTR name;
IXMLDOMNode* pAttrNode;
map->getNamedItem( name, &pAttrNode );
return 0;
}

このコードでコンパイルとおらないなら
includeするものがまちがってるのでは?

スキルアップ/キャリアアップ(JOB@IT)