[BACK]Return to elements.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / mit / expat / dist / examples

Annotation of src/external/mit/expat/dist/examples/elements.c, Revision 1.1.1.4

1.1       tron        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>
1.1.1.4 ! christos    9: #include <expat.h>
1.1       tron       10:
                     11: #ifdef XML_LARGE_SIZE
                     12: #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
                     13: #define XML_FMT_INT_MOD "I64"
                     14: #else
                     15: #define XML_FMT_INT_MOD "ll"
                     16: #endif
                     17: #else
                     18: #define XML_FMT_INT_MOD "l"
                     19: #endif
                     20:
                     21: static void XMLCALL
                     22: startElement(void *userData, const char *name, const char **atts)
                     23: {
                     24:   int i;
                     25:   int *depthPtr = (int *)userData;
1.1.1.3   spz        26:   (void)atts;
                     27:
1.1       tron       28:   for (i = 0; i < *depthPtr; i++)
                     29:     putchar('\t');
                     30:   puts(name);
                     31:   *depthPtr += 1;
                     32: }
                     33:
                     34: static void XMLCALL
                     35: endElement(void *userData, const char *name)
                     36: {
                     37:   int *depthPtr = (int *)userData;
1.1.1.3   spz        38:   (void)name;
                     39:
1.1       tron       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;
1.1.1.3   spz        50:   (void)argc;
                     51:   (void)argv;
                     52:
1.1       tron       53:   XML_SetUserData(parser, &depth);
                     54:   XML_SetElementHandler(parser, startElement, endElement);
                     55:   do {
1.1.1.2   spz        56:     size_t len = fread(buf, 1, sizeof(buf), stdin);
1.1       tron       57:     done = len < sizeof(buf);
                     58:     if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
                     59:       fprintf(stderr,
                     60:               "%s at line %" XML_FMT_INT_MOD "u\n",
                     61:               XML_ErrorString(XML_GetErrorCode(parser)),
                     62:               XML_GetCurrentLineNumber(parser));
                     63:       return 1;
                     64:     }
                     65:   } while (!done);
                     66:   XML_ParserFree(parser);
                     67:   return 0;
                     68: }

CVSweb <webmaster@jp.NetBSD.org>