From d09ab089457ae3c20cc98f9afa03379c6ebf9598 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 25 Mar 2004 06:59:32 +0000 Subject: [svn-inject] Installing original source version --- doc/examples/tree2.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 doc/examples/tree2.c (limited to 'doc/examples/tree2.c') diff --git a/doc/examples/tree2.c b/doc/examples/tree2.c new file mode 100644 index 0000000..3ab2179 --- /dev/null +++ b/doc/examples/tree2.c @@ -0,0 +1,118 @@ +/* + * section: Tree + * synopsis: Creates a tree + * purpose: Shows how to create document, nodes and dump it to stdout or file. + * usage: tree2 -Default output: stdout + * test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp + * author: Lucas Brasilino + * copy: see Copyright for the status of this software + */ + +#include +#include +#include + +#ifdef LIBXML_TREE_ENABLED + +/* + *To compile this file using gcc you can type + *gcc `xml2-config --cflags --libs` -o tree2 tree2.c + */ + +/* A simple example how to create DOM. Libxml2 automagically + * allocates the necessary amount of memory to it. +*/ +int +main(int argc, char **argv) +{ + xmlDocPtr doc = NULL; /* document pointer */ + xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */ + xmlDtdPtr dtd = NULL; /* DTD pointer */ + char buff[256]; + int i, j; + + LIBXML_TEST_VERSION; + + /* + * Creates a new document, a node and set it as a root node + */ + doc = xmlNewDoc(BAD_CAST "1.0"); + root_node = xmlNewNode(NULL, BAD_CAST "root"); + xmlDocSetRootElement(doc, root_node); + + /* + * Creates a DTD declaration. Isn't mandatory. + */ + dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "tree2.dtd"); + + /* + * xmlNewChild() creates a new node, which is "attached" as child node + * of root_node node. + */ + xmlNewChild(root_node, NULL, BAD_CAST "node1", + BAD_CAST "content of node 1"); + /* + * The same as above, but the new child node doesn't have a content + */ + xmlNewChild(root_node, NULL, BAD_CAST "node2", NULL); + + /* + * xmlNewProp() creates attributes, which is "attached" to an node. + * It returns xmlAttrPtr, which isn't used here. + */ + node = + xmlNewChild(root_node, NULL, BAD_CAST "node3", + BAD_CAST "this node has attributes"); + xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes"); + xmlNewProp(node, BAD_CAST "foo", BAD_CAST "bar"); + + /* + * Here goes another way to create nodes. xmlNewNode() and xmlNewText + * creates a node and a text node separately. They are "attached" + * by xmlAddChild() + */ + node = xmlNewNode(NULL, BAD_CAST "node4"); + node1 = xmlNewText(BAD_CAST + "other way to create content (which is also a node)"); + xmlAddChild(node, node1); + xmlAddChild(root_node, node); + + /* + * A simple loop that "automates" nodes creation + */ + for (i = 5; i < 7; i++) { + sprintf(buff, "node%d", i); + node = xmlNewChild(root_node, NULL, BAD_CAST buff, NULL); + for (j = 1; j < 4; j++) { + sprintf(buff, "node%d%d", i, j); + node1 = xmlNewChild(node, NULL, BAD_CAST buff, NULL); + xmlNewProp(node1, BAD_CAST "odd", BAD_CAST((j % 2) ? "no" : "yes")); + } + } + + /* + * Dumping document to stdio or file + */ + xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1); + + /*free the document */ + xmlFreeDoc(doc); + + /* + *Free the global variables that may + *have been allocated by the parser. + */ + xmlCleanupParser(); + + /* + * this is to debug memory for regression tests + */ + xmlMemoryDump(); + return(0); +} +#else +int main(void) { + fprintf(stderr, "tree support not compiled in\n"); + exit(1); +} +#endif -- cgit v1.2.3