1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <stdio.h>
008 #include "expat.h"
009
010 static void
011 startElement(void *userData, const char *name, const char **atts)
012 {
013 int i;
014 int *depthPtr = userData;
015 for (i = 0; i < *depthPtr; i++)
016 putchar('\t');
017 puts(name);
018 *depthPtr += 1;
019 }
020
021 static void
022 endElement(void *userData, const char *name)
023 {
024 int *depthPtr = userData;
025 *depthPtr -= 1;
026 }
027
028 int
029 main(int argc, char *argv[])
030 {
031 char buf[BUFSIZ];
032 XML_Parser parser = XML_ParserCreate(NULL);
033 int done;
034 int depth = 0;
035 XML_SetUserData(parser, &depth);
036 XML_SetElementHandler(parser, startElement, endElement);
037 do {
038 size_t len = fread(buf, 1, sizeof(buf), stdin);
039 done = len < sizeof(buf);
040 if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
041 fprintf(stderr,
042 "%s at line %d\n",
043 XML_ErrorString(XML_GetErrorCode(parser)),
044 XML_GetCurrentLineNumber(parser));
045 return 1;
046 }
047 } while (!done);
048 XML_ParserFree(parser);
049 return 0;
050 } |
Partager