Annotation of embedaddon/libxml2/doc/examples/tree2.c, revision 1.1
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
! 6: * test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
! 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>