Annotation of embedaddon/expat/examples/elements.c, revision 1.1
1.1 ! misho 1: /* This is simple demonstration of how to use expat. This program
! 2: reads an XML document from standard input and writes a line with
! 3: the name of each element to standard output indenting child
! 4: elements by one tab stop more than their parent element.
! 5: It must be used with Expat compiled for UTF-8 output.
! 6: */
! 7:
! 8: #include <stdio.h>
! 9: #include "expat.h"
! 10:
! 11: #if defined(__amigaos__) && defined(__USE_INLINE__)
! 12: #include <proto/expat.h>
! 13: #endif
! 14:
! 15: #ifdef XML_LARGE_SIZE
! 16: #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
! 17: #define XML_FMT_INT_MOD "I64"
! 18: #else
! 19: #define XML_FMT_INT_MOD "ll"
! 20: #endif
! 21: #else
! 22: #define XML_FMT_INT_MOD "l"
! 23: #endif
! 24:
! 25: static void XMLCALL
! 26: startElement(void *userData, const char *name, const char **atts)
! 27: {
! 28: int i;
! 29: int *depthPtr = (int *)userData;
! 30: for (i = 0; i < *depthPtr; i++)
! 31: putchar('\t');
! 32: puts(name);
! 33: *depthPtr += 1;
! 34: }
! 35:
! 36: static void XMLCALL
! 37: endElement(void *userData, const char *name)
! 38: {
! 39: int *depthPtr = (int *)userData;
! 40: *depthPtr -= 1;
! 41: }
! 42:
! 43: int
! 44: main(int argc, char *argv[])
! 45: {
! 46: char buf[BUFSIZ];
! 47: XML_Parser parser = XML_ParserCreate(NULL);
! 48: int done;
! 49: int depth = 0;
! 50: XML_SetUserData(parser, &depth);
! 51: XML_SetElementHandler(parser, startElement, endElement);
! 52: do {
! 53: int len = (int)fread(buf, 1, sizeof(buf), stdin);
! 54: done = len < sizeof(buf);
! 55: if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
! 56: fprintf(stderr,
! 57: "%s at line %" XML_FMT_INT_MOD "u\n",
! 58: XML_ErrorString(XML_GetErrorCode(parser)),
! 59: XML_GetCurrentLineNumber(parser));
! 60: return 1;
! 61: }
! 62: } while (!done);
! 63: XML_ParserFree(parser);
! 64: return 0;
! 65: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>