mcrblog

vcpp-ml

2002年11月

30

[vcpp 00059953] MSXML4.0 : PI xml-stylesheet の属性を取得する方法

こんにちは。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
30

[vcpp 00059953] MSXML4.0 : PI xml-stylesheet の属性を取得する方法

こんにちは。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
30

[vcpp 00059951] RE: コンボボックス特定 Item の色変更

 渋木です。

 最初の投稿に

>題記、コンボボックスのリストの特定項目(Itemと呼んで
>いいかな・・・?)の色を変更したいと考えております。
>(環境:WinNT4.0, MSVC++5.0)

 とあったので念のため。。。

> >どこかでオーナドローしているコードがあるはずです。
> >そこでこのItemData を背景色と見ているのでしょう。
> 矢張り・・・。>どこかでItemData を背景色と見ている

 誰かが書いたプログラムのメンテではなく新規のプロジェクトなら、そのコー
ドはあなたが書いて組み込まない限りそのコードは存在しませんよ?

 SetImteDate() の機能は、あなたの想像通り

>この場合は上から2行目のItemに8と
>いう数字が割り当てられただけな気がしているので・・・。

 でしかありません。

 あなたが追加した「オーナードロー」のコード中に、「SetItemData() で設定
された色で背景色を塗りつぶす」処理を記述するのです。


--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
//
30

[vcpp 00059952] RE: コンボボックス特定 Item の色変更

 渋木です。

 最初の投稿に

>題記、コンボボックスのリストの特定項目(Itemと呼んで
>いいかな・・・?)の色を変更したいと考えております。
>(環境:WinNT4.0, MSVC++5.0)

 とあったので念のため。。。

> >どこかでオーナドローしているコードがあるはずです。
> >そこでこのItemData を背景色と見ているのでしょう。
> 矢張り・・・。>どこかでItemData を背景色と見ている

 誰かが書いたプログラムのメンテではなく新規のプロジェクトなら、そのコー
ドはあなたが書いて組み込まない限りそのコードは存在しませんよ?

 SetImteDate() の機能は、あなたの想像通り

>この場合は上から2行目のItemに8と
>いう数字が割り当てられただけな気がしているので・・・。

 でしかありません。

 あなたが追加した「オーナードロー」のコード中に、「SetItemData() で設定
された色で背景色を塗りつぶす」処理を記述するのです。


--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
//
30

[vcpp 00059951] RE: コンボボックス特定 Item の色変更

 渋木です。

 最初の投稿に

>題記、コンボボックスのリストの特定項目(Itemと呼んで
>いいかな・・・?)の色を変更したいと考えております。
>(環境:WinNT4.0, MSVC++5.0)

 とあったので念のため。。。

> >どこかでオーナドローしているコードがあるはずです。
> >そこでこのItemData を背景色と見ているのでしょう。
> 矢張り・・・。>どこかでItemData を背景色と見ている

 誰かが書いたプログラムのメンテではなく新規のプロジェクトなら、そのコー
ドはあなたが書いて組み込まない限りそのコードは存在しませんよ?

 SetImteDate() の機能は、あなたの想像通り

>この場合は上から2行目のItemに8と
>いう数字が割り当てられただけな気がしているので・・・。

 でしかありません。

 あなたが追加した「オーナードロー」のコード中に、「SetItemData() で設定
された色で背景色を塗りつぶす」処理を記述するのです。


--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
//
記事検索
Amazon.co.jp
  • ライブドアブログ