int main (int argc, char **argv) { GError *error = NULL; RestXmlParser *parser; RestXmlNode *root, *node; char *xml; g_thread_init (NULL); g_type_init (); parser = rest_xml_parser_new (); root = rest_xml_parser_parse_from_data (parser, TEST_XML, strlen (TEST_XML)); g_assert (root); xml = rest_xml_node_print (root); g_assert (xml); if (strcmp (TEST_XML, xml)) { g_error ("Generated output for parsed XML does not match:\n" "in: %s\n" "out: %s\n", TEST_XML, xml); } rest_xml_node_unref (root); root = rest_xml_node_add_child (NULL, "node0"); rest_xml_node_add_attr (root, "a00", "v00"); rest_xml_node_add_attr (root, "a01", "v01"); node = rest_xml_node_add_child (root, "node1"); rest_xml_node_add_attr (node, "a10", "v10"); node = rest_xml_node_add_child (root, "node1"); rest_xml_node_add_attr (node, "a10", "v10"); rest_xml_node_set_content (root, "Cont0"); xml = rest_xml_node_print (root); g_assert (xml); if (strcmp (TEST_XML, xml)) { g_error ("Generated output for constructed XML does not match:\n" "in: %s\n" "out: %s\n", TEST_XML, xml); } rest_xml_node_unref (root); return 0; }
static gchar * _construct_upload_atom_xml (GHashTable *fields, gboolean incomplete) { GHashTableIter iter; gpointer key, value; RestXmlNode *entry = rest_xml_node_add_child (NULL, "entry"); RestXmlNode *group = rest_xml_node_add_child (entry, "media:group"); gchar *bare_xml; gchar *full_xml; rest_xml_node_add_attr (entry, "xmlns", "http://www.w3.org/2005/Atom"); rest_xml_node_add_attr (entry, "xmlns:media", "http://search.yahoo.com/mrss/"); rest_xml_node_add_attr (entry, "xmlns:yt", "http://gdata.youtube.com/schemas/2007"); if (incomplete) rest_xml_node_add_child (group, "yt:incomplete"); g_hash_table_iter_init (&iter, fields); while (g_hash_table_iter_next (&iter, &key, &value)) { RestXmlNode *node; gchar *tag_name; const gchar* field_value = value; const gchar* field_key = key; tag_name = g_strdup_printf ("media:%s", field_key); node = rest_xml_node_add_child (group, tag_name); if (g_strcmp0 (field_key, "title") == 0 || g_strcmp0 (field_key, "description") == 0) rest_xml_node_add_attr (node, "type", "plain"); if (g_strcmp0 (field_key, "category") == 0) rest_xml_node_add_attr (node, "scheme", "http://gdata.youtube.com/" "schemas/2007/categories.cat"); rest_xml_node_set_content (node, field_value); } bare_xml = rest_xml_node_print (entry); full_xml = g_strdup_printf ("<?xml version=\"1.0\"?>\n%s", bare_xml); rest_xml_node_unref (entry); g_free (bare_xml); return full_xml; }
static YtsMetadata * create_message (char const *type, GVariant *payload) { RestXmlNode *node; char *payload_str; char *payload_str_escaped;; node = rest_xml_node_add_child (NULL, "message"); /* PONDERING need those keywords be made reserved */ rest_xml_node_add_attr (node, "type", type); rest_xml_node_add_attr (node, "capability", SERVICE_FQC_ID); payload_str = g_variant_print (payload, false); /* FIXME this is just a stopgap solution to lacking g_markup_unescape_text() * want to move to complex message bodies anywy. */ payload_str_escaped = g_uri_escape_string (payload_str, NULL, true); rest_xml_node_add_attr (node, "payload", payload_str_escaped); g_free (payload_str_escaped); g_free (payload_str); if (g_variant_is_floating (payload)) g_variant_unref (payload); return g_object_new (YTS_TYPE_MESSAGE, "top-level-node", node, NULL); }