Edit

kc3-lang/libxml2/example/tree1.c

Branch :

  • Show log

    Commit

  • Author : Nick Wellnhofer
    Date : 2024-06-15 22:53:55
    Hash : b0fc67aa
    Message : build: Remove --with-tree configuration option This option would allow for a smaller, but mostly useless minimal build. But it complicates the symbol availability logic in an insane way and requires specialized tools like our custom C parser in doc/apibuild.py. See #717.

  • example/tree1.c
  • /**
     * 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>
    
    /*
     *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);
    
        return 0;
    }