mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
Synchronized the header files with the library code in order to assure that all the various conditionals (LIBXML_xxxx_ENABLED) were the same in both. Modified the API database content to more accurately reflect the conditionals. Enhanced the generation of that database. Although there was no substantial change to any of the library code's logic, a large number of files were modified to achieve the above, and the configuration script was enhanced to do some automatic enabling of features (e.g. --with-xinclude forces --with-xpath). Additionally, all the format errors discovered by apibuild.py were corrected. * configure.in: enhanced cross-checking of options * doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml, doc/libxml2-api.xml, gentest.py: changed the usage of the <cond> element in module descriptions * elfgcchack.h, testapi.c: regenerated with proper conditionals * HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c, testSAX.c: cleaned up conditionals * include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h, hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h, valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]: synchronized the conditionals with the corresponding module code * doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c: added additional conditions required for compilation * doc/*.html, doc/html/*.html: rebuilt the docs
119 lines
3.4 KiB
C
119 lines
3.4 KiB
C
/*
|
|
* 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 <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>
|
|
|
|
#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_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
|