Arcen's Blog

アクセスカウンタ

zoom RSS [Win32]MSXMLでSAX読み込み

<<   作成日時 : 2011/03/19 23:45   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

MSXMLを用いたSAXによるXML読み込み。

sax.hは長いので別にアップロード。

ハンドラを利用した読み込み。
#include "stdafx.h"
#include "sax.h"
#include <crtdbg.h>

//ハンドラ
class testHandler : public MSXML2_SAX::SAXDefaultHandler
{
int indent;
public:
typedef MSXML2_SAX::SAXAttributes SAXAttributes;
testHandler() : indent( 0 ) {}
void outputIndent() { for ( int i = 0; i < indent; ++i ) printf( "\t" ); }
virtual void startDocument()
{
printf( "start\n" );
}
virtual void endDocument()
{
printf( "end\n" );
}
virtual void startElement( wchar_t * uri, int uriSize, wchar_t * localname, int localnameSize, wchar_t * qname, int qnameSize, SAXAttributes & attributes )
{
std::wstring w_qname( qname, qnameSize );
std::string a_qname = CW2A( w_qname.c_str() );
printf( "\n" );
outputIndent();
printf( "<%s\n", a_qname.c_str() );
++indent;
for ( int i = 0, n = attributes.getLength(); i < n; ++i ) {
wchar_t * attrName, * attrValue;
int attrNameSize, attrValueSize;
if ( attributes.getQName( i, attrName, attrNameSize ) &&
attributes.getValue( i, attrValue, attrValueSize ) )
{
std::wstring w_aname( attrName, attrNameSize );
std::string a_aname = CW2A( w_aname.c_str() );
std::wstring w_avalue( attrValue, attrValueSize );
std::string a_avalue = CW2A( w_avalue.c_str() );
outputIndent();
printf( "%s=%s\n", a_aname.c_str(), a_avalue.c_str() );
}
}
outputIndent();
printf( ">\n" );
}
virtual void endElement( wchar_t * uri, int uriSize, wchar_t * localname, int localnameSize, wchar_t * qname, int qnameSize )
{
std::wstring w_qname( qname, qnameSize );
std::string a_qname = CW2A( w_qname.c_str() );
printf( "\n" );
outputIndent();
printf( "</%s>\n", a_qname.c_str() );
--indent;
}
virtual void characters( wchar_t * chars, int charsSize )
{
std::wstring w_chars( chars, charsSize );
std::string a_chars = CW2A( w_chars.c_str() );
printf( "%s", a_chars.c_str() );
}
};

int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
CoInitialize( NULL );
{
testHandler handler;
{
MSXML2_SAX::SAXXMLReader reader( & handler );
reader.parsePath( "sample.xml" );
}
}
CoUninitialize();
return 0;
}

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
[Win32]MSXMLでSAX読み込み Arcen's Blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる