[xml] code example: tree creation

Hi Daniel:

Here goes a little example how to create a simple tree.
It should be useful... :)



Lucas Brasilino
brasilino recife pe gov br
Emprel -        Empresa Municipal de Informatica (pt_BR)
                Municipal Computing Enterprise (en_US)
Recife - Pernambuco - Brasil
Fone: +55-81-34167078
 * section:  Tree
 * synopsis: Creates a tree
 * purpose:  Shows how to create document, nodes and dump it to stdout or file.
 * usage:    tree2 <filename>  -Default output: stdout
 * test:     tree2
 * author:   Lucas Brasilino <brasilino recife pe gov br>
 * 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 tree2 tree2.c

/* A simple example how to create DOM. Libxml2 automagically 
 * allocates the necessary amount of memory to it.
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;
  * 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. 
  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", (j%2)?"no":"yes");

  * Dumping document to stdio or file
  xmlSaveFormatFileEnc ((argv[1])?argv[1]:"-",doc, "UTF-8", 1);

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]