头文件:
#include
对应动态库:
libexpat.so
XML_Parser XML_ParserCreate (const char *encoding);
参数可选,可用NULL作为参数
void XML_ParserFree (XML_Parser p);
XML_SetElementHandler(XML_Parser p,XML_StartElementHandler startElement, XML_EndElementHandler endElement);
typedef void (*XML_StartElementHandler)(void *uData,const char *name,const char **atts);
typedef void (*XML_EndElementHandler )(void *uData,const char *name,const char **atts);
void XMLCALL startElement(void *userData, const char *name, const char **atts);
struct Date_Struct {
....
int depth;
};
void XMLCALL startElement(void *userData, const char *name, const char **atts)
{
Date_Struct *UserData = (Date_Struct *)userData;
// 解析
UserData->depth ++;
static void XMLCALL endElement(void *userData, const char *name);
struct Date_Struct {
....
int depth;
};
static void XMLCALL endElement(void *userData, const char *name)
{
Date_Struct *UserData = (Date_Struct *)userData;
UserData->depth--;
printf("End %s\n", name);
}
XML_SetCharacterDataHandler(XML_Parser p, XML_CharacterDataHandler contentHandler);
struct Date_Struct {
....
int depth;
};
static void XMLCALL contentHandler(void *userData, const char *s, int len)
{
Date_Struct *UserData = (Date_Struct *)userData;
printf("[%d] %s\n", len, s);
}
typedef void
(*XML_CharacterDataHandler)(void *uData,const char *s,int len);
int XML_Parse (XML_Parser p,const char *s, int len, int isFinal);
int isFinal :表示这部分 string 书不是文本的最后一部分了。
但是:不是每段文本都需要通过 0来表示结束,我们也可以通过显实的长度来判定。
void XML_SetUserData (XML_Parser p, void *uData);
学习参考