irpas技术客

【xml 解析库】expat使用学习_YFLICKERH

网络 5111

expat

头文件:

#include <expat.h>

对应动态库: libexpat.so

解析器创建与释放 XML_ParserCreate XML_ParserCreate: Create a new parser object. XML_Parser XML_ParserCreate (const char *encoding);

参数可选,可用NULL作为参数

XML_ParserFree void XML_ParserFree (XML_Parser p); 注册回调句柄 当创建了一个解析器后,需要注册回调的句柄 XML_SetElementHandler XML_SetElementHandler: Set handlers for start and end tags. 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); startElement 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 ++; endElement 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_SetCharacterDataHandler :Set handler for text. XML_SetCharacterDataHandler(XML_Parser p, XML_CharacterDataHandler contentHandler); 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); } 一个文本句柄仅以字符串作为额外的参数 XML_SetCharacterDataHandler的第二函数指针 contentHandler typedef void (*XML_CharacterDataHandler)(void *uData,const char *s,int len); 将需要解析的文本传给expat XML_Parse XML_Parse :Pass a buffer full of document to the parser int XML_Parse (XML_Parser p,const char *s, int len, int isFinal);

int isFinal :表示这部分 string 书不是文本的最后一部分了。 但是:不是每段文本都需要通过 0来表示结束,我们也可以通过显实的长度来判定。

设置将要传给句柄的用户数据的函数 XML_SetUserData void XML_SetUserData (XML_Parser p, void *uData);

学习参考


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #XML #解析库expat使用学习 #expat #库解析 #常用库函数学习总结