123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- (*
- * 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 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
- * author: Lucas Brasilino <[email protected]>
- * copy: see Copyright for the status of this software
- *)
- program tree2;
- {$mode objfpc}
- uses
- ctypes,
- xml2,
- exutils,
- SysUtils;
- var
- doc: xmlDocPtr;
- root_node, node, node1: xmlNodePtr;
- dtd: xmlDtdPtr;
- buff: array[0..255] of char;
- i, j: cint;
- begin
- LIBXML_TEST_VERSION;
- (*
- * Creates a new document, a node and set it as a root node
- *)
- doc := xmlNewDoc('1.0');
- root_node := xmlNewNode(nil, 'root');
- xmlDocSetRootElement(doc, root_node);
- (*
- * Creates a DTD declaration. Isn't mandatory.
- *)
- dtd := xmlCreateIntSubset(doc, 'root', nil, 'tree2.dtd');
- (*
- * xmlNewChild() creates a new node, which is "attached" as child node
- * of root_node node.
- *)
- xmlNewChild(root_node, nil, 'node1', 'content of node 1');
- (*
- * The same as above, but the new child node doesn't have a content
- *)
- xmlNewChild(root_node, nil, 'node2', nil);
- (*
- * xmlNewProp() creates attributes, which is "attached" to an node.
- * It returns xmlAttrPtr, which isn't used here.
- *)
- node := xmlNewChild(root_node, nil, 'node3', 'this node has attributes');
- xmlNewProp(node, 'attribute', 'yes');
- xmlNewProp(node, 'foo', '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(nil, 'node4');
- node1 := xmlNewText('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 to 6 do
- begin
- buff := 'node'+inttostr(i);
- node := xmlNewChild(root_node, nil, buff, nil);
- for j := 1 to 3 do
- begin
- buff := 'node'+inttostr(i)+inttostr(j);
- node1 := xmlNewChild(node, nil, buff, nil);
- if j mod 2 = 0 then
- xmlNewProp(node1, 'odd', 'no')
- else
- xmlNewProp(node1, 'odd', 'yes');
- end;
- end;
- (*
- * Dumping document to stdio or file
- *)
- docdump(doc);
- //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();
- end.
|