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