static void XMLCALL expatStartElementHandler(void *userData, const XML_Char *name, const XML_Char **atts) { MyUserData* myUserData = static_cast<MyUserData*>(userData); assert(myUserData); XMLHandler* handler = myUserData->handler; const UTFConverter& converter = myUserData->converter; assert(handler); assert(converter); std::string& s0 = myUserData->s0; std::string& s1 = myUserData->s1; XMLAttributes attributes; for (const XML_Char**p = atts; *p; p += 2) { assert(p[0] && p[1]); s0 = p[0]; s1 = p[1]; attributes.setValue(converter(s0, s0), converter(s1, s1)); } s0 = name; handler->startElement(converter(s0, s0), attributes); }