From 920c0249bd241320abcd15cf3379b66d6c83e2f5 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Sun, 28 Jun 2009 22:23:55 +0100 Subject: [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. --- gdata/gdata-feed.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'gdata/gdata-feed.c') 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); -- cgit v1.2.1