2003-11-19 16:24:26 +00:00
/*
* 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
More cleanups to the documentation part of libxml2
doc/Makefile.am:
* Build what's in doc/ before doc/devhelp/, as the dependency graph flows
that way
* Add "--path $(srcdir)" so that xsltproc can find DTDs in srcdir
* Replaced $(top_srcdir)/doc with an equivalent $(srcdir)
* Qualified libxml2-api.xml with $(srcdir) as it's always generated there
* Rewrote the dependencies for libxml2-api.xml so that xmlversion.h
doesn't throw everything off
doc/devhelp/Makefile.am:
* Use Automake constructs to install the HTML files instead of an
install-data-local rule
* Reorganized the file a bit (hello whitespace!)
* EXTRA_DIST doesn't need to list so many files now that dist_devhelp_DATA
is being used
* Only print "Rebuilding devhelp files" if rebuilding is actually
occurring
doc/examples/index.py:
* Make the "this file is auto-generated" banner more prominent
* Autotools updates: Use AM_CPPFLAGS/AM_CFLAGS instead of INCLUDES
* Got rid of DEPS as it's not needed (Automake already sees the dependency
on libxml2.la by way of LDADD(S))
* Replaced LDADDS with LDADD, which is applied to all programs listed
in the file. Since all the test programs have the same link
dependencies, this way is more concise yet equivalent.
* Remove the *.tmp files via "make clean" instead of having the test
programs do it themselves (more on this later)
* Invoke index.py in srcdir, as it pretty much needs to run there
* Restructured the index.html rule so that only the xmllint invocation is
allowed to fail
* Use $(MKDIR_P) instead of $(mkinstalldirs), $(VAR) instead of @VAR@
* Remove symlinks for test?.xml in an out-of-source build
* Sort lists for neatness
* Better formatting for EXTRA_DIST and noinst_PROGRAMS variables
* Simplified the Automake bits printed for each program: *_LDFLAGS doesn't
need to be specified as it's empty anyway, *_DEPENDENCIES is redundant,
*_LDADD isn't needed due to the global LDADD
* Added a bit that symlinks in test?.xml from srcdir in out-of-source
builds. This allows the reader4 test to read these files in the current
directory, which ensures that the output always looks the same (i.e.
does not contain references to srcdir)
* Don't hide the test program invocation (or else it's hard to tell which
test failed), and don't use superfluous parentheses
* NOTE: If you check in these changes, be sure to run this script and also
check in the updated files that it generates!
doc/examples/*.c:
* Updated the test: lines so that
+ "&&" is used to separate commands instead of ";" so that errors are
not masked
+ reference files are qualified with $(srcdir)/
+ no "rm" takes place -- these are a problem because (1) if a test
fails, it's useful to have the output file ready for inspection; (2)
the "rm" invocation masks a potential non-zero exit status from diff
(This is why I added the CLEANFILES line above)
doc/examples/io1.res:
* Updated this ref file so that the test passes. (This is correct, right?)
doc/examples/reader4.res:
* Changed this back to its original form, as the symlinking of test?.xml
means this file no longer has to contain path prefixes on the filenames
doc/examples/testWriter.c:
* Changed the output filenames to *.tmp instead of *.res, partly for
consistency, partly to not have to add special cases to CLEANFILES
doc/examples/xpath1.c:
* Removed the "./" prefix on the test invocation, which is redundant as
index.py already adds one
2012-08-17 09:58:38 +08:00
* test : tree2 > tree2 . tmp & & diff tree2 . tmp $ ( srcdir ) / tree2 . res
2003-11-19 16:24:26 +00:00
* 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>
Re-examined the problems of configuring a "minimal" library.
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
2005-01-02 09:53:13 +00:00
# if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
2004-03-04 15:59:36 +00:00
2003-11-19 16:24:26 +00:00
/*
* 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 */
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 .
*/
2016-08-22 12:16:31 +02:00
xmlCreateIntSubset ( doc , BAD_CAST " root " , NULL , BAD_CAST " tree2.dtd " ) ;
2003-11-19 16:24:26 +00:00
/*
* 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 ( ) ;
2004-01-23 13:15:13 +00:00
/*
* this is to debug memory for regression tests
*/
xmlMemoryDump ( ) ;
2003-11-19 16:24:26 +00:00
return ( 0 ) ;
}
2004-03-04 15:59:36 +00:00
# else
int main ( void ) {
fprintf ( stderr , " tree support not compiled in \n " ) ;
2022-04-21 06:03:22 +02:00
return ( 0 ) ;
2004-03-04 15:59:36 +00:00
}
# endif