Micro XML Parser
[Micro XML]
Detailed Description
The Micro XML parser is implemented in pure c, and can be used without the Micro XML DOM. The parser supports input stream buffering, and provides parsed document information via 3 registered callbacks on the created parser object.
Classes | |
struct | MXMLParser |
XMLParser type returned by MXMLParserCreate. More... | |
Typedefs | |
typedef void(* | MXMLStartElementCallback )(void *a_userData, const char *a_name, const char **a_attributes) |
parser callback to handle xml start elements | |
typedef void(* | MXMLEndElementCallback )(void *a_userData, const char *a_name) |
parser callback to handle xml end elements | |
typedef void(* | MXMLCharacterDataCallback )(void *a_userData, const char *a_data, size_t a_size, MXMLCharacterDataType a_type) |
parser callback to handle xml element data, a_size does not include terminating char | |
typedef void *(* | MXMLAlloc )(size_t a_size) |
parser alloc callback | |
typedef void(* | MXMLFree )(void *a_mem) |
parser free callback | |
Functions | |
MXMLParser * | MXMLParserCreate (MXMLAlloc a_Alloc, MXMLFree a_Free) |
create a micro xml parser | |
void | MXMLParserDestroy (MXMLParser *a_parser) |
destroy a xml parser | |
MXMLResult | MXMLParserParse (MXMLParser *a_parser, const unsigned char *a_buffer, size_t a_bufferSize, int a_lastBuffer) |
parse function | |
const char * | MXMLParserGetErrorString (MXMLParser *a_parser) |
return an error string if MXMLParserParse returned MXML_RESULT_ERROR |
Typedef Documentation
|
parser callback to handle xml element data, a_size does not include terminating char
|
|
parser callback to handle xml end elements
|
|
parser callback to handle xml start elements
|
Function Documentation
|
create a micro xml parser
|
|
destroy a xml parser
|
|
parse function
static void StartElement(void *userData, const char *name, const char **atts) { printf("<name=%s ", name); for(int i = 0; atts[i]; i += 2) { const char * name = atts[i]; const char * value = atts[i+1]; printf(", %s = %s", name, value); } printf(">\n"); } static void EndElement(void *userData, const char *name) { printf("</%s>\n", name); } static void CharacterData(void *userData, const char *s, size_t len, MXMLCharacterDataType a_type) { printf("%s\n", s); } static int Load(FILE * f) { unsigned char buf[8192]; MXMLParser * parser = MXMLParserCreate(malloc, free); int done; parser->m_userData = NULL; parser->m_StartElementCallback = StartElement; parser->m_EndElementCallback = EndElement; parser->m_CharacterDataCallback = CharacterData; do { size_t len = fread(buf, 1, sizeof(buf), f); done = len < sizeof(buf); if (MXMLParserParse(parser, buf, len, done) == MXML_RESULT_ERROR) { MXMLParserGetErrorString(parser); MXMLParserDestroy(parser); return -1; } } while (!done); MXMLParserDestroy(parser); return 0; } |