(root)/
libxml2-2.12.3/
doc/
examples/
reader1.c
       1  /**
       2   * section: xmlReader
       3   * synopsis: Parse an XML file with an xmlReader
       4   * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
       5   *          and dump the information about the nodes found in the process.
       6   *          (Note that the XMLReader functions require libxml2 version later
       7   *          than 2.6.)
       8   * usage: reader1 <filename>
       9   * test: reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
      10   * author: Daniel Veillard
      11   * copy: see Copyright for the status of this software.
      12   */
      13  
      14  #include <stdio.h>
      15  #include <libxml/xmlreader.h>
      16  
      17  #ifdef LIBXML_READER_ENABLED
      18  
      19  /**
      20   * processNode:
      21   * @reader: the xmlReader
      22   *
      23   * Dump information about the current node
      24   */
      25  static void
      26  processNode(xmlTextReaderPtr reader) {
      27      const xmlChar *name, *value;
      28  
      29      name = xmlTextReaderConstName(reader);
      30      if (name == NULL)
      31  	name = BAD_CAST "--";
      32  
      33      value = xmlTextReaderConstValue(reader);
      34  
      35      printf("%d %d %s %d %d", 
      36  	    xmlTextReaderDepth(reader),
      37  	    xmlTextReaderNodeType(reader),
      38  	    name,
      39  	    xmlTextReaderIsEmptyElement(reader),
      40  	    xmlTextReaderHasValue(reader));
      41      if (value == NULL)
      42  	printf("\n");
      43      else {
      44          if (xmlStrlen(value) > 40)
      45              printf(" %.40s...\n", value);
      46          else
      47  	    printf(" %s\n", value);
      48      }
      49  }
      50  
      51  /**
      52   * streamFile:
      53   * @filename: the file name to parse
      54   *
      55   * Parse and print information about an XML file.
      56   */
      57  static void
      58  streamFile(const char *filename) {
      59      xmlTextReaderPtr reader;
      60      int ret;
      61  
      62      reader = xmlReaderForFile(filename, NULL, 0);
      63      if (reader != NULL) {
      64          ret = xmlTextReaderRead(reader);
      65          while (ret == 1) {
      66              processNode(reader);
      67              ret = xmlTextReaderRead(reader);
      68          }
      69          xmlFreeTextReader(reader);
      70          if (ret != 0) {
      71              fprintf(stderr, "%s : failed to parse\n", filename);
      72          }
      73      } else {
      74          fprintf(stderr, "Unable to open %s\n", filename);
      75      }
      76  }
      77  
      78  int main(int argc, char **argv) {
      79      if (argc != 2)
      80          return(1);
      81  
      82      /*
      83       * this initialize the library and check potential ABI mismatches
      84       * between the version it was compiled for and the actual shared
      85       * library used.
      86       */
      87      LIBXML_TEST_VERSION
      88  
      89      streamFile(argv[1]);
      90  
      91      return(0);
      92  }
      93  
      94  #else
      95  int main(void) {
      96      fprintf(stderr, "XInclude support not compiled in\n");
      97      return(0);
      98  }
      99  #endif