Example 1 - Stream-oriented XML Application Shell
/************************************************************************/
/* Example XML Application, App.c - This example reads any XML file(s) */
/* specified on the command-line when invoked. It is a convenient */
/* starting-template for writing stream-oriented (or SAX-like) parsers. */
/* */
/* Compile: */
/* cc -g app.c -lm -o app.exe */
/* */
/* Run: */
/* app.exe myxmlfile.xml */
/* */
/************************************************************************/
#include <stdio.h>
#include "xml_parse_lib.c"
#define MaxStr 2048
void read_xml_file( char *fname )
{
char tag[MaxStr], contents[MaxStr], tagname[MaxStr], attrname[MaxStr], value[MaxStr];
float x1, y1, z1, x2, y2, z2, t0, t1;
int linum=0;
FILE *infile=0, *outfile=0;
infile = fopen(fname,"r");
if (infile==0) {printf("Error: Cannot open input file '%s'.\n",fname); exit(1);}
xml_parse( infile, tag, contents, MaxStr, &linum );
while (tag[0]!='\0')
{
xml_grab_tag_name( tag, tagname, MaxStr ); /* Get tag name. */
/* Add your application code here to accept tag-name, such as: */
printf("Tag name = '%s'\n", tagname );
xml_grab_attrib( tag, attrname, value, MaxStr ); /* Get any attributes within tag. */
while (value[0] != '\0')
{
/* Add application code here to accept attribute attrname and value, such as: */
printf(" Attribute: %s = '%s'\n", attrname, value );
xml_grab_attrib( tag, attrname, value, MaxStr ); /* Get next attribute, if any. */
}
/* Add application code here to accept contents between tags, such as: */
printf(" Contents = '%s'\n", contents );
xml_parse( infile, tag, contents, MaxStr, &linum );
}
fclose(infile);
}
int main( int argc, char *argv[] )
{
int j=1, k;
/* Get the command-line arguments. */
if (argc <= 1) {printf("Missing input file on command-line.\n"); exit(1);}
while (argc > j)
{ /*argument*/
read_xml_file( argv[j] );
j = j + 1;
} /*argument*/
return 0;
}
Back