Annotation of embedaddon/expat/examples/elements.c, revision 1.1.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>