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