summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Burton <ross@linux.intel.com>2009-04-14 15:28:45 +0100
committerRoss Burton <ross@linux.intel.com>2009-04-14 17:44:14 +0100
commitc1c500ac0d2691f33106cb8bc3989e9058a32616 (patch)
treeb109caf7b4168206f1571bad904eb4404400b630
parent6b7c9fb499f6ad80eeb7e74fea16c51366423505 (diff)
downloadlibrest-c1c500ac0d2691f33106cb8bc3989e9058a32616.tar.gz
Add a example to dump a XML file
-rw-r--r--.gitignore1
-rw-r--r--examples/Makefile.am3
-rw-r--r--examples/dump-xml.c112
3 files changed, 115 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index ca487b9..d040e1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,5 +25,6 @@ docs/reference/rest/rest-decl*.txt
examples/test-oauth
examples/test-raw
examples/test-xml
+examples/dump-xml
tests/oauth
tests/proxy
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 9fd4152..1955524 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,4 +1,4 @@
-noinst_PROGRAMS = test-raw test-xml test-oauth
+noinst_PROGRAMS = test-raw test-xml test-oauth dump-xml
AM_CFLAGS = $(GLIB_CFLAGS) $(SOUP_CFLAGS) -I$(top_srcdir)
AM_LDFLAGS = $(GLIB_LIBS) $(SOUP_LIBS) ../rest/librest.la
@@ -6,3 +6,4 @@ AM_LDFLAGS = $(GLIB_LIBS) $(SOUP_LIBS) ../rest/librest.la
test_raw_SOURCES = test-raw.c
test_xml_SOURCES = test-xml.c
test_oauth_SOURCES = test-oauth.c
+dump_xml_SOURCES = dump-xml.c
diff --git a/examples/dump-xml.c b/examples/dump-xml.c
new file mode 100644
index 0000000..0983571
--- /dev/null
+++ b/examples/dump-xml.c
@@ -0,0 +1,112 @@
+/*
+ * librest - RESTful web services access
+ * Copyright (c) 2008, 2009, Intel Corporation.
+ *
+ * Authors: Rob Bradford <rob@linux.intel.com>
+ * Ross Burton <ross@linux.intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <rest/rest-xml-parser.h>
+
+/* These debugging functions *leak* */
+static gchar *
+_generate_attrs_output (GHashTable *attrs)
+{
+ char *res;
+ char *res_old = NULL;
+ GList *keys, *values, *l, *ll;
+
+ res = g_strdup ("{ ");
+
+ keys = g_hash_table_get_keys (attrs);
+ values = g_hash_table_get_values (attrs);
+
+ for (l = keys, ll = values; l; l = l->next, ll = ll->next)
+ {
+ res_old = res;
+ res = g_strconcat (res, l->data, ":", ll->data, " ", NULL);
+ g_free (res_old);
+ }
+
+ g_list_free (keys);
+ g_list_free (values);
+
+ res_old = res;
+ res = g_strconcat (res, "}", NULL);
+ g_free (res_old);
+
+ return res;
+}
+
+static void
+_rest_xml_node_output (RestXmlNode *node, gint depth)
+{
+ RestXmlNode *child;
+ GList *values;
+ GList *l;
+ char *attrs_output = NULL;
+
+ do {
+ attrs_output = _generate_attrs_output (node->attrs);
+ g_print ("%*s[%s, %s, %s]\n",
+ depth,
+ "",
+ node->name,
+ node->content ? node->content : "NULL",
+ attrs_output);
+ g_free (attrs_output);
+ values = g_hash_table_get_values (node->children);
+ for (l = values; l; l = l->next)
+ {
+ child = (RestXmlNode *)l->data;
+ g_print ("%*s%s - >\n", depth, "", child->name);
+ _rest_xml_node_output (child, depth + 4);
+ }
+ g_list_free (values);
+ } while ((node = node->next) != NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+ RestXmlParser *parser;
+ RestXmlNode *node;
+ GError *error = NULL;
+ char *data = NULL;
+ gsize length;
+
+ if (argc != 2) {
+ g_printerr ("$ dump-xml <FILENAME>\n");
+ return 1;
+ }
+
+ g_type_init ();
+
+ if (!g_file_get_contents (argv[1], &data, &length, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ parser = rest_xml_parser_new ();
+ node = rest_xml_parser_parse_from_data (parser, data, length);
+ _rest_xml_node_output (node, 0);
+ rest_xml_node_unref (node);
+ g_object_unref (parser);
+
+ return 0;
+}