tree1.c revision d0cf7f6eea7331cc398c232d7879e4239d989e14
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 tree1.res ; rm tree1.tmp 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 */ 30static void 31print_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 */ 50int 51main(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 90int main(void) { 91 fprintf(stderr, "Tree support not compiled in\n"); 92 exit(1); 93} 94#endif 95