diff options
author | Philip Withnall <philip@tecnocode.co.uk> | 2009-06-28 22:23:55 +0100 |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2009-06-28 22:23:55 +0100 |
commit | 920c0249bd241320abcd15cf3379b66d6c83e2f5 (patch) | |
tree | ed07200334498483a010d32c216573f00248ecbf /gdata/gdata-feed.c | |
parent | dad5356795c230886e11d8a63fbd4fc27596b2f4 (diff) | |
download | libgdata-920c0249bd241320abcd15cf3379b66d6c83e2f5.tar.gz |
[core] Link element names and namespaces to the relevant classes
This introduces new element_name and element_namespaces fields to the
GDataParsableClass struct, allowing for simpler parsing of XML by linking
XML element names to parsable object types. Some of the GDataParsable API
is now public, which will allow for a more comprehensive test suite in future.
Diffstat (limited to 'gdata/gdata-feed.c')
-rw-r--r-- | gdata/gdata-feed.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gdata/gdata-feed.c b/gdata/gdata-feed.c index 2b6a9c4b..5a38c212 100644 --- a/gdata/gdata-feed.c +++ b/gdata/gdata-feed.c @@ -99,6 +99,7 @@ gdata_feed_class_init (GDataFeedClass *klass) parsable_class->pre_parse_xml = pre_parse_xml; parsable_class->parse_xml = parse_xml; parsable_class->post_parse_xml = post_parse_xml; + parsable_class->element_name = "feed"; /** * GDataFeed:title: @@ -397,7 +398,7 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da if (xmlStrcmp (node->name, (xmlChar*) "entry") == 0) { /* atom:entry */ - GDataEntry *entry = GDATA_ENTRY (_gdata_parsable_new_from_xml_node (data->entry_type, "entry", doc, node, NULL, error)); + GDataEntry *entry = GDATA_ENTRY (_gdata_parsable_new_from_xml_node (data->entry_type, doc, node, NULL, error)); if (entry == NULL) return FALSE; @@ -458,7 +459,7 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da xmlFree (updated_string); } else if (xmlStrcmp (node->name, (xmlChar*) "category") == 0) { /* atom:category */ - GDataCategory *category = GDATA_CATEGORY (_gdata_parsable_new_from_xml_node (GDATA_TYPE_CATEGORY, "category", doc, node, NULL, error)); + GDataCategory *category = GDATA_CATEGORY (_gdata_parsable_new_from_xml_node (GDATA_TYPE_CATEGORY, doc, node, NULL, error)); if (category == NULL) return FALSE; @@ -471,14 +472,14 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da self->priv->logo = (gchar*) xmlNodeListGetString (doc, node->children, TRUE); } else if (xmlStrcmp (node->name, (xmlChar*) "link") == 0) { /* atom:link */ - GDataLink *link = GDATA_LINK (_gdata_parsable_new_from_xml_node (GDATA_TYPE_LINK, "link", doc, node, NULL, error)); + GDataLink *link = GDATA_LINK (_gdata_parsable_new_from_xml_node (GDATA_TYPE_LINK, doc, node, NULL, error)); if (link == NULL) return FALSE; self->priv->links = g_list_prepend (self->priv->links, link); } else if (xmlStrcmp (node->name, (xmlChar*) "author") == 0) { /* atom:author */ - GDataAuthor *author = GDATA_AUTHOR (_gdata_parsable_new_from_xml_node (GDATA_TYPE_AUTHOR, "author", doc, node, NULL, error)); + GDataAuthor *author = GDATA_AUTHOR (_gdata_parsable_new_from_xml_node (GDATA_TYPE_AUTHOR, doc, node, NULL, error)); if (author == NULL) return FALSE; @@ -491,7 +492,7 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da if (self->priv->generator != NULL) return gdata_parser_error_duplicate_element (node, error); - generator = GDATA_GENERATOR (_gdata_parsable_new_from_xml_node (GDATA_TYPE_GENERATOR, "generator", doc, node, NULL, error)); + generator = GDATA_GENERATOR (_gdata_parsable_new_from_xml_node (GDATA_TYPE_GENERATOR, doc, node, NULL, error)); if (generator == NULL) return FALSE; @@ -588,7 +589,7 @@ _gdata_feed_new_from_xml (GType feed_type, const gchar *xml, gint length, GType data->progress_user_data = progress_user_data; data->entry_i = 0; - feed = GDATA_FEED (_gdata_parsable_new_from_xml (feed_type, "feed", xml, length, data, error)); + feed = GDATA_FEED (_gdata_parsable_new_from_xml (feed_type, xml, length, data, error)); g_slice_free (ParseData, data); |