Home | History | Annotate | Download | only in examples
      1 /**
      2  * section: Tree
      3  * synopsis: Navigates a tree to print element names
      4  * purpose: Parse a file to a tree, use xmlDocGetRootElement() to
      5  *          get the root element, then walk the document and print
      6  *          all the element name in document order.
      7  * usage: tree1 filename_or_URL
      8  * test: tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res
      9  * author: Dodji Seketeli
     10  * copy: see Copyright for the status of this software.
     11  */
     12 #include <stdio.h>
     13 #include <libxml/parser.h>
     14 #include <libxml/tree.h>
     15 
     16 #ifdef LIBXML_TREE_ENABLED
     17 
     18 /*
     19  *To compile this file using gcc you can type
     20  *gcc `xml2-config --cflags --libs` -o xmlexample libxml2-example.c
     21  */
     22 
     23 /**
     24  * print_element_names:
     25  * @a_node: the initial xml node to consider.
     26  *
     27  * Prints the names of the all the xml elements
     28  * that are siblings or children of a given xml node.
     29  */
     30 static void
     31 print_element_names(xmlNode * a_node)
     32 {
     33     xmlNode *cur_node = NULL;
     34 
     35     for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
     36         if (cur_node->type == XML_ELEMENT_NODE) {
     37             printf("node type: Element, name: %s\n", cur_node->name);
     38         }
     39 
     40         print_element_names(cur_node->children);
     41     }
     42 }
     43 
     44 
     45 /**
     46  * Simple example to parse a file called "file.xml",
     47  * walk down the DOM, and print the name of the
     48  * xml elements nodes.
     49  */
     50 int
     51 main(int argc, char **argv)
     52 {
     53     xmlDoc *doc = NULL;
     54     xmlNode *root_element = NULL;
     55 
     56     if (argc != 2)
     57         return(1);
     58 
     59     /*
     60      * this initialize the library and check potential ABI mismatches
     61      * between the version it was compiled for and the actual shared
     62      * library used.
     63      */
     64     LIBXML_TEST_VERSION
     65 
     66     /*parse the file and get the DOM */
     67     doc = xmlReadFile(argv[1], NULL, 0);
     68 
     69     if (doc == NULL) {
     70         printf("error: could not parse file %s\n", argv[1]);
     71     }
     72 
     73     /*Get the root element node */
     74     root_element = xmlDocGetRootElement(doc);
     75 
     76     print_element_names(root_element);
     77 
     78     /*free the document */
     79     xmlFreeDoc(doc);
     80 
     81     /*
     82      *Free the global variables that may
     83      *have been allocated by the parser.
     84      */
     85     xmlCleanupParser();
     86 
     87     return 0;
     88 }
     89 #else
     90 int main(void) {
     91     fprintf(stderr, "Tree support not compiled in\n");
     92     exit(1);
     93 }
     94 #endif
     95