diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-11-17 21:10:17 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-11-17 21:10:17 (GMT) |
commit | 8096d34300076a1aa9cb517de49fb920a051939f (patch) | |
tree | 5f2b1b7c41f89fedc31af973d6a747ca674cfd24 /libxml2/doc/examples/tree1.c | |
parent | fc7f7edd0b8011cb71573b15462ef83068d9e54b (diff) | |
parent | 574585fa78070b0cc6b5ad22543e21a3502a122b (diff) | |
download | blt-8096d34300076a1aa9cb517de49fb920a051939f.zip blt-8096d34300076a1aa9cb517de49fb920a051939f.tar.gz blt-8096d34300076a1aa9cb517de49fb920a051939f.tar.bz2 |
Merge commit '574585fa78070b0cc6b5ad22543e21a3502a122b' as 'libxml2'
Diffstat (limited to 'libxml2/doc/examples/tree1.c')
-rw-r--r-- | libxml2/doc/examples/tree1.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/libxml2/doc/examples/tree1.c b/libxml2/doc/examples/tree1.c new file mode 100644 index 0000000..e6faefc --- /dev/null +++ b/libxml2/doc/examples/tree1.c @@ -0,0 +1,94 @@ +/** + * section: Tree + * synopsis: Navigates a tree to print element names + * purpose: Parse a file to a tree, use xmlDocGetRootElement() to + * get the root element, then walk the document and print + * all the element name in document order. + * usage: tree1 filename_or_URL + * test: tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res + * author: Dodji Seketeli + * copy: see Copyright for the status of this software. + */ +#include <stdio.h> +#include <libxml/parser.h> +#include <libxml/tree.h> + +#ifdef LIBXML_TREE_ENABLED + +/* + *To compile this file using gcc you can type + *gcc `xml2-config --cflags --libs` -o xmlexample libxml2-example.c + */ + +/** + * print_element_names: + * @a_node: the initial xml node to consider. + * + * Prints the names of the all the xml elements + * that are siblings or children of a given xml node. + */ +static void +print_element_names(xmlNode * a_node) +{ + xmlNode *cur_node = NULL; + + for (cur_node = a_node; cur_node; cur_node = cur_node->next) { + if (cur_node->type == XML_ELEMENT_NODE) { + printf("node type: Element, name: %s\n", cur_node->name); + } + + print_element_names(cur_node->children); + } +} + + +/** + * Simple example to parse a file called "file.xml", + * walk down the DOM, and print the name of the + * xml elements nodes. + */ +int +main(int argc, char **argv) +{ + xmlDoc *doc = NULL; + xmlNode *root_element = NULL; + + if (argc != 2) + return(1); + + /* + * this initialize the library and check potential ABI mismatches + * between the version it was compiled for and the actual shared + * library used. + */ + LIBXML_TEST_VERSION + + /*parse the file and get the DOM */ + doc = xmlReadFile(argv[1], NULL, 0); + + if (doc == NULL) { + printf("error: could not parse file %s\n", argv[1]); + } + + /*Get the root element node */ + root_element = xmlDocGetRootElement(doc); + + print_element_names(root_element); + + /*free the document */ + xmlFreeDoc(doc); + + /* + *Free the global variables that may + *have been allocated by the parser. + */ + xmlCleanupParser(); + + return 0; +} +#else +int main(void) { + fprintf(stderr, "Tree support not compiled in\n"); + exit(1); +} +#endif |