Thread: Need help with this xml tree example

  1. #1
    Registered User
    Join Date
    May 2004
    Posts
    114

    Need help with this xml tree example

    Im gona be using xml for my game, i found this simple example which goes through the tree and prints each bit (here )

    Im going to be wanting to check each name instead of printing it so i can put things into structures.

    The thing im confused about is how to go about it. The function print_element_names calls itself which makes it more confusing. Im also not sure about the for loop, the bit which is usualy => 10 or whatever is just cur_node which i dont really follow.

    :-| confused

    Code:
    /**
     * 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 tree1.res ; rm tree1.tmp
     * 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

  2. #2
    ATH0 quzah's Avatar
    Join Date
    Oct 2001
    Posts
    14,826
    You should probably visit the FAQ and read some of Prelude's tutorials. Specificly the ones dealing with trees.

    Quzah.
    Hope is the first step on the road to disappointment.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Interpreter.c
    By moussa in forum C Programming
    Replies: 4
    Last Post: 05-28-2008, 05:59 PM
  2. Binary Tree, couple questions
    By scoobasean in forum C Programming
    Replies: 3
    Last Post: 03-12-2005, 09:09 PM
  3. Binary Search Trees Part III
    By Prelude in forum A Brief History of Cprogramming.com
    Replies: 16
    Last Post: 10-02-2004, 03:00 PM
  4. Request for comments
    By Prelude in forum A Brief History of Cprogramming.com
    Replies: 15
    Last Post: 01-02-2004, 10:33 AM
  5. BST/Red and Black Tree
    By ghettoman in forum C++ Programming
    Replies: 0
    Last Post: 10-24-2001, 10:45 PM