Expat 解析 xml

来源:互联网 发布:好莱坞电影推荐 知乎 编辑:程序博客网 时间:2024/05/16 17:36


Expat 解析 xml

Expat 是一个用C语言开发的、用来解析XML文档的开发库,一个XML解析器。


Expat XML Parser支持设置多种不同的处理器。但是要使用它们,你只需要学习四个功能,即可满足80%的需要。
它们是:
XML_ParserCreate  创建一个解析对象
XML_SetElementHandler  设置开始结束的回调函数
XML_SetCharacterDataHandler  设置字符数据的回调函数
XML_Parse

Expat 支持的格式

  • UTF-8
  • UTF-16
  • ISO-8859-1
  • US-ASCII

一个例子

/* This is simple demonstration of how to use expat. This program   reads an XML document from standard input and writes a line with   the name of each element to standard output indenting child   elements by one tab stop more than their parent element.   It must be used with Expat compiled for UTF-8 output.*/#include <stdio.h>#include "expat.h"#if defined(__amigaos__) && defined(__USE_INLINE__)#include <proto/expat.h>#endif#ifdef XML_LARGE_SIZE#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400#define XML_FMT_INT_MOD "I64"#else#define XML_FMT_INT_MOD "ll"#endif#else#define XML_FMT_INT_MOD "l"#endifstatic void XMLCALLstartElement(void *userData, const char *name, const char **atts){  int i;  int *depthPtr = (int *)userData;  for (i = 0; i < *depthPtr; i++)    putchar('\t');  puts(name);  *depthPtr += 1;}static void XMLCALLendElement(void *userData, const char *name){  int *depthPtr = (int *)userData;  *depthPtr -= 1;}intmain(int argc, char *argv[]){  char buf[BUFSIZ];  XML_Parser parser = XML_ParserCreate(NULL);  int done;  int depth = 0;  XML_SetUserData(parser, &depth);  XML_SetElementHandler(parser, startElement, endElement);  do {    int len = (int)fread(buf, 1, sizeof(buf), stdin);    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;}
0 0
原创粉丝点击