ITPUB论坛 » 移动与游戏开发 » 有谁在MTK上使用expat做xml解析?
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-1-9 17:20 smartpig
有谁在MTK上使用expat做xml解析?

在mtk上,我使用了expat2.0.1,把它加入到plutommi\mmi\MyApp下,代码如下
#include   <expat.h>
....

static   void   XMLCALL
startElement(void   *userData,   const   char   *name,   const   char   **atts)
{
    int   i;
    int   *depthPtr   =   (int   *)userData;
    CONST_HARDWARE   color   UI_COLOR_RED   =   {255,   0,   0,   100};
      for   (i   =   0;   i   <   *depthPtr;   i++)
      {
          startheight+=24*(i+1);
          gui_move_text_cursor(startwidth,startheight);
          gui_set_text_color(UI_COLOR_RED);
          gui_print_text((UI_string_type)name);
          gui_BLT_double_buffer(0,0,UI_DEVICE_WIDTH-1,   UI_DEVICE_HEIGHT-1);   
    }
    *depthPtr   +=   1;
}

static   void   XMLCALL
endElement(void   *userData,   const   char   *name)
{
    int   *depthPtr   =   (int   *)userData;
    *depthPtr   -=   1;
}

//在外部调用,从这里进入xml的解析
void   mmi_myapp_entry(void)   
{
    char   buf[BUFSIZ];
    XML_Parser   parser   =   XML_ParserCreate(NULL);
    int   done;
    int   depth   =   0;
    int   i   =   sizeof(buf);
    XML_SetUserData(parser,   &depth);
    XML_SetElementHandler(parser,   startElement,   endElement);
    do   {
        strcpy(buf," <book> <name> Design   Pattern </name> <author> GOF </author> </book> ");
        done   =   len   <   sizeof(buf);
        if   (XML_Parse(parser,   buf,   len,   done)   ==   XML_STATUS_ERROR)   {
            fprintf(stderr,
                            "%s   at   line   %"   XML_FMT_INT_MOD   "u\n",
                            XML_ErrorString(XML_GetErrorCode(parser)),
                            XML_GetCurrentLineNumber(parser));
            return   1;
        }
    }   while   (!done);
    XML_ParserFree(parser);
    return   0;
}
但是,这样写就开不了机,跟了一下是XML_SetElementHandler这里;如果把startElement声明成startElement(void   *UserData,   const   char   *Name,   const   char   **Atts),可以开机,但显然这样的话执行不到startElement内部了,因为   
XML_SetElementHandler(XML_Parser   parser,
                                            XML_StartElementHandler   start,
                                            XML_EndElementHandler   end)
{
    startElementHandler   =   start;
    endElementHandler   =   end;
}
而#define   userData   (parser-> m_userData),说明我把函数类型改了。
现在所有的尝试就是这样了,但实在不知道问题出在哪里,expat程序本身看懂也很难啊,有没有做过的朋友一起讨论下阿?

2008-1-9 17:20 dotnetworker
不过那两个可以写NULL,自己手动调用就行了,
在XML_SetElementHandler后面调用startElement
XML_ParserFree(parser);   前面调用endElement

2008-5-4 20:30 dearmeiw
顶,还有谁搞MTK???

页: [1]


Powered by ITPUB论坛