SAXパーサーなので、お手軽にいじれるのは知っていました。
まぁ、ハンドラをさくさくと登録して、xmlファイルをメモリに読み込んでパーサーに食わせたら、はいお仕舞い。
XML_SetXmlDeclHandler
XML_SetElementHandler
XML_SetCharacterDataHandler
この辺を登録しておけばよさげ。
rdfとかでCDATAが必要なら、
XML_SetCdataSectionHandler
で、拾える模様。
アトリビュートをどう拾うかというと、
XML_SetStartElementHandlerのXML_StartElementHandlerが、
typedef void (XMLCALL *XML_StartElementHandler)(void *userData, const XML_Char *name,
const XML_Char **atts);
こんなtypedefされていて、attsがtag=valueの組み合わせになっている模様。
attsがNULLになるまで、ぐるぐるまわせば全部げっと出来ます。
for (int i = 0; attributes[i]; i += 2) { char temp_string[256]; sprintf(temp_string, " Attribute %s='%s'\n", attributes[i], attributes[i + 1]); ::OutputDebugString(temp_string);}
次はexpatとは関係ないけど、utf-8 -> cp932ですね。
sjisで書いてパースできないものか。
XML_SetUnknownEncodingHandler
あたりが怪しいと睨んでいるのですが、サンプルないし困った感じです。