こんにちは。bh2 といいます。

MSXML4.0 の DOM を C++ から使う場合 についての質問です。

勉強を兼ねて、XML文書を読みこんでノードの属性を列挙するプログラムを作っていますが、
下記の (2) のように、対象となるノードが <?xml-stylesheet?> の場合、
アトリビュートマップに NULL が返ってきて属性が取得できません。

どのようにすれば属性を取得できるのでしょうか。

-----------------------------------------------------------------------
IXMLDOMNode *pXMLNode;
IXMLDOMNamedNodeMap *pXMLAttrMap;

// (1) ノード <?xml version="1.0" encoding="utf-8"?> の場合
// pXMLAttrMap には期待通り version、encoding が入る
pXMLNode->get_attributes( &pXMLAttrMap );

// (2) ノード <?xml-stylesheet type="text/xsl" href="foo.xsl"?> の場合
// pXMLAttrMap に期待に反して NULL が返る
pXMLNode->get_attributes( &pXMLAttrMap );
-----------------------------------------------------------------------

私は、(2) の場合についても、pXMLAttrMap に type と
href が返ってくるものだと期待していました。

開発環境は VC++6.0 です。
OS は訳あって Windows 98 SE です。

※ なお、XML関係の掲示板で教えていただいたページの内容を元に、
下記のようにしたところ、pXMLElem には文書のルートノードが
返ってきまして、 PI である <?xml-stylesheet?> は取得できませんでした。

-----------------------------------------------------------------------
IXMLDOMDocument2Ptr *pXMLDom;
IXMLDOMElement *pXMLElem;
IXMLDOMAttribute *pXMLAttr;
const TCHAR pszAttrName[] = _T( "href" );
BSTR bstrAttrName = ::SysAllocString( (const unsigned short*) pszAttrName );

// pXMLElem には ルートノードが返ってくるので、
pXMLDom->get_documentElement( &pXMLElem );
// 当然ここはルートノードの属性が返る。
pXMLAttr=pXMLElem->getAttributeNode( bstrAttrName) ;
-----------------------------------------------------------------------

----
bh2  b...@hotmail.com