有5种不同的事件类型
1)一个element的开始
2)一个element的结束
3)element得文本
4)一些stuff
5) 错误
There are five kinds of event which can happen:
- The start of an element
- The end of an element
- Some text (inside an element)
- Some other stuff (processing instructions, mainly, including comments and doctypes)
- An error
simple.xml :
<zoo> <animal noise="roar">lion</animal> <animal noise="sniffle">bunny</animal> <animal noise="lol">cat</animal> <keeper/> </zoo>
被解析成以下的动作
- Start of “zoo”.
- Start of “animal”, with a “noise” attribute of “roar”.
- The text “lion”.
- End of “animal”.
- Start of “animal”, with a “noise” attribute of “sniffle”.
- The text “bunny”.
- End of “animal”.
- Start of “animal”, with a “noise” attribute of “lol”.
- The text “cat”.
- End of “animal”.
- Start of “keeper”.
- End of “keeper”.
- End of “zoo”.
I am a lion and I go roar. Can you do it?
I am a bunny and I go sniffle. Can you do it?
I am a cat and I go lol. Can you do it?
|
static void text( GMarkupParseContext * context,
const gchar * text,
gsize text_len,
gpointer user_data,
GError * * error )
{
if ( current_animal_noise)
printf ( "I am a %*s and I go %s. Can you do it?/n" ,
text_len, text, current_animal_noise) ;
printf ( "test text/n" ) ;
}
GMarkupParser parser = {
. start_element = start,
. end_element = end,
. text = text,
. passthrough = NULL ,
. error = NULL
} ;
int main( )
{
char * buf;
gsize length;
GMarkupParseContext * context;
g_file_get_contents( "test.xml" , & buf, & length, NULL ) ;
g_printf( "%s/n" , buf) ;
context = g_markup_parse_context_new( & parser, 0, NULL , NULL ) ;
if ( g_markup_parse_context_parse( context, buf, length, NULL ) = = FALSE )
{
printf ( "Couldn't load xml/n" ) ;
g_markup_parse_context_free(context);
return 0;
}