2003-11-20 18:22:31 +00:00
/**
* section : xmlReader
* synopsis : Parse an XML file with an xmlReader
* purpose : Demonstrate the use of xmlReaderForFile ( ) to parse an XML file
2004-01-31 15:23:33 +00:00
* and dump the informations about the nodes found in the process .
* ( Note that the XMLReader functions require libxml2 version later
* than 2.6 . )
2003-11-20 18:22:31 +00:00
* usage : reader1 < filename >
2003-12-17 15:08:55 +00:00
* test : reader1 test2 . xml > reader1 . tmp ; diff reader1 . tmp reader1 . res ; rm reader1 . tmp
2003-11-20 18:22:31 +00:00
* author : Daniel Veillard
* copy : see Copyright for the status of this software .
*/
# include <stdio.h>
# include <libxml/xmlreader.h>
2004-03-04 15:59:36 +00:00
# ifdef LIBXML_READER_ENABLED
2003-11-20 18:22:31 +00:00
/**
* processNode :
* @ reader : the xmlReader
*
* Dump information about the current node
*/
static void
processNode ( xmlTextReaderPtr reader ) {
const xmlChar * name , * value ;
name = xmlTextReaderConstName ( reader ) ;
if ( name = = NULL )
name = BAD_CAST " -- " ;
value = xmlTextReaderConstValue ( reader ) ;
printf ( " %d %d %s %d %d " ,
xmlTextReaderDepth ( reader ) ,
xmlTextReaderNodeType ( reader ) ,
name ,
xmlTextReaderIsEmptyElement ( reader ) ,
xmlTextReaderHasValue ( reader ) ) ;
if ( value = = NULL )
printf ( " \n " ) ;
else {
if ( xmlStrlen ( value ) > 40 )
printf ( " %.40s... \n " , value ) ;
else
printf ( " %s \n " , value ) ;
}
}
/**
* streamFile :
* @ filename : the file name to parse
*
* Parse and print information about an XML file .
*/
static void
streamFile ( const char * filename ) {
xmlTextReaderPtr reader ;
int ret ;
reader = xmlReaderForFile ( filename , NULL , 0 ) ;
if ( reader ! = NULL ) {
ret = xmlTextReaderRead ( reader ) ;
while ( ret = = 1 ) {
processNode ( reader ) ;
ret = xmlTextReaderRead ( reader ) ;
}
xmlFreeTextReader ( reader ) ;
if ( ret ! = 0 ) {
fprintf ( stderr , " %s : failed to parse \n " , filename ) ;
}
} else {
fprintf ( stderr , " Unable to open %s \n " , filename ) ;
}
}
int main ( int argc , char * * argv ) {
if ( argc ! = 2 )
return ( 1 ) ;
/*
* this initialize the library and check potential ABI mismatches
* between the version it was compiled for and the actual shared
* library used .
*/
LIBXML_TEST_VERSION
streamFile ( argv [ 1 ] ) ;
/*
* Cleanup function for the XML library .
*/
xmlCleanupParser ( ) ;
2004-01-23 13:15:13 +00:00
/*
* this is to debug memory for regression tests
*/
xmlMemoryDump ( ) ;
2003-11-20 18:22:31 +00:00
return ( 0 ) ;
}
2004-03-04 15:59:36 +00:00
# else
int main ( void ) {
fprintf ( stderr , " XInclude support not compiled in \n " ) ;
exit ( 1 ) ;
}
# endif