Annotation of embedaddon/libxml2/doc/examples/tree2.c, revision 1.1.1.2

1.1       misho       1: /* 
                      2:  * section:  Tree
                      3:  * synopsis: Creates a tree
                      4:  * purpose:  Shows how to create document, nodes and dump it to stdout or file.
                      5:  * usage:    tree2 <filename>  -Default output: stdout
1.1.1.2 ! misho       6:  * test:     tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res
1.1       misho       7:  * author:   Lucas Brasilino <brasilino@recife.pe.gov.br>
                      8:  * copy:     see Copyright for the status of this software
                      9:  */
                     10: 
                     11: #include <stdio.h>
                     12: #include <libxml/parser.h>
                     13: #include <libxml/tree.h>
                     14: 
                     15: #if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
                     16: 
                     17: /*
                     18:  *To compile this file using gcc you can type
                     19:  *gcc `xml2-config --cflags --libs` -o tree2 tree2.c
                     20:  */
                     21: 
                     22: /* A simple example how to create DOM. Libxml2 automagically 
                     23:  * allocates the necessary amount of memory to it.
                     24: */
                     25: int
                     26: main(int argc, char **argv)
                     27: {
                     28:     xmlDocPtr doc = NULL;       /* document pointer */
                     29:     xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
                     30:     xmlDtdPtr dtd = NULL;       /* DTD pointer */
                     31:     char buff[256];
                     32:     int i, j;
                     33: 
                     34:     LIBXML_TEST_VERSION;
                     35: 
                     36:     /* 
                     37:      * Creates a new document, a node and set it as a root node
                     38:      */
                     39:     doc = xmlNewDoc(BAD_CAST "1.0");
                     40:     root_node = xmlNewNode(NULL, BAD_CAST "root");
                     41:     xmlDocSetRootElement(doc, root_node);
                     42: 
                     43:     /*
                     44:      * Creates a DTD declaration. Isn't mandatory. 
                     45:      */
                     46:     dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "tree2.dtd");
                     47: 
                     48:     /* 
                     49:      * xmlNewChild() creates a new node, which is "attached" as child node
                     50:      * of root_node node. 
                     51:      */
                     52:     xmlNewChild(root_node, NULL, BAD_CAST "node1",
                     53:                 BAD_CAST "content of node 1");
                     54:     /* 
                     55:      * The same as above, but the new child node doesn't have a content 
                     56:      */
                     57:     xmlNewChild(root_node, NULL, BAD_CAST "node2", NULL);
                     58: 
                     59:     /* 
                     60:      * xmlNewProp() creates attributes, which is "attached" to an node.
                     61:      * It returns xmlAttrPtr, which isn't used here.
                     62:      */
                     63:     node =
                     64:         xmlNewChild(root_node, NULL, BAD_CAST "node3",
                     65:                     BAD_CAST "this node has attributes");
                     66:     xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
                     67:     xmlNewProp(node, BAD_CAST "foo", BAD_CAST "bar");
                     68: 
                     69:     /*
                     70:      * Here goes another way to create nodes. xmlNewNode() and xmlNewText
                     71:      * creates a node and a text node separately. They are "attached"
                     72:      * by xmlAddChild() 
                     73:      */
                     74:     node = xmlNewNode(NULL, BAD_CAST "node4");
                     75:     node1 = xmlNewText(BAD_CAST
                     76:                    "other way to create content (which is also a node)");
                     77:     xmlAddChild(node, node1);
                     78:     xmlAddChild(root_node, node);
                     79: 
                     80:     /* 
                     81:      * A simple loop that "automates" nodes creation 
                     82:      */
                     83:     for (i = 5; i < 7; i++) {
                     84:         sprintf(buff, "node%d", i);
                     85:         node = xmlNewChild(root_node, NULL, BAD_CAST buff, NULL);
                     86:         for (j = 1; j < 4; j++) {
                     87:             sprintf(buff, "node%d%d", i, j);
                     88:             node1 = xmlNewChild(node, NULL, BAD_CAST buff, NULL);
                     89:             xmlNewProp(node1, BAD_CAST "odd", BAD_CAST((j % 2) ? "no" : "yes"));
                     90:         }
                     91:     }
                     92: 
                     93:     /* 
                     94:      * Dumping document to stdio or file
                     95:      */
                     96:     xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
                     97: 
                     98:     /*free the document */
                     99:     xmlFreeDoc(doc);
                    100: 
                    101:     /*
                    102:      *Free the global variables that may
                    103:      *have been allocated by the parser.
                    104:      */
                    105:     xmlCleanupParser();
                    106: 
                    107:     /*
                    108:      * this is to debug memory for regression tests
                    109:      */
                    110:     xmlMemoryDump();
                    111:     return(0);
                    112: }
                    113: #else
                    114: int main(void) {
                    115:     fprintf(stderr, "tree support not compiled in\n");
                    116:     exit(1);
                    117: }
                    118: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>