expatをいぢった結果。

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

あたりが怪しいと睨んでいるのですが、サンプルないし困った感じです。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>