xml/xmlexpatparser/src/expat-1.95.5/examples/elements.c
changeset 0 e35f40988205
equal deleted inserted replaced
-1:000000000000 0:e35f40988205
       
     1 /* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
       
     2    See the file COPYING for copying permission.
       
     3 */
       
     4 /* This is simple demonstration of how to use expat. This program
       
     5    reads an XML document from standard input and writes a line with
       
     6    the name of each element to standard output indenting child
       
     7    elements by one tab stop more than their parent element.
       
     8 */
       
     9 
       
    10 #include <stdio.h>
       
    11 #include "expat.h"
       
    12 
       
    13 static void
       
    14 startElement(void *userData, const char *name, const char **atts)
       
    15 {
       
    16   int i;
       
    17   int *depthPtr = userData;
       
    18   for (i = 0; i < *depthPtr; i++)
       
    19     putchar('\t');
       
    20   puts(name);
       
    21   *depthPtr += 1;
       
    22 }
       
    23 
       
    24 static void
       
    25 endElement(void *userData, const char *name)
       
    26 {
       
    27   int *depthPtr = userData;
       
    28   *depthPtr -= 1;
       
    29 }
       
    30 
       
    31 int
       
    32 main(int argc, char *argv[])
       
    33 {
       
    34   char buf[BUFSIZ];
       
    35   XML_Parser parser = XML_ParserCreate(NULL);
       
    36   int done;
       
    37   int depth = 0;
       
    38   XML_SetUserData(parser, &depth);
       
    39   XML_SetElementHandler(parser, startElement, endElement);
       
    40   do {
       
    41     size_t len = fread(buf, 1, sizeof(buf), stdin);
       
    42     done = len < sizeof(buf);
       
    43     if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
       
    44       fprintf(stderr,
       
    45               "%s at line %d\n",
       
    46               XML_ErrorString(XML_GetErrorCode(parser)),
       
    47               XML_GetCurrentLineNumber(parser));
       
    48       return 1;
       
    49     }
       
    50   } while (!done);
       
    51   XML_ParserFree(parser);
       
    52   return 0;
       
    53 }