[libgsf] xml: don't complain over elements in unknown namespaces.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgsf] xml: don't complain over elements in unknown namespaces.
- Date: Sat, 25 Sep 2010 16:48:44 +0000 (UTC)
commit 80c2798d8b0ee2675fb347b9d03479cb3c81110d
Author: Morten Welinder <terra gnome org>
Date: Sat Sep 25 12:48:20 2010 -0400
xml: don't complain over elements in unknown namespaces.
ChangeLog | 5 +++++
NEWS | 2 +-
gsf/gsf-libxml.c | 21 +++++++++++++++++++++
3 files changed, 27 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 2a98ac5..85f41a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-25 Morten Welinder <terra gnome org>
+
+ * gsf/gsf-libxml.c (gsf_xml_in_start_element): Don't complain over
+ elements in unknown namespaces.
+
2010-09-15 Andreas J. Guelzow <aguelzow pyrshep ca>
* gsf/gsf-opendoc-utils.c (gsf_ooo_ns): add another one of OOo's
diff --git a/NEWS b/NEWS
index f7932ab..614834e 100644
--- a/NEWS
+++ b/NEWS
@@ -4,7 +4,7 @@ Andreas:
* Add some more OOo 3.2 and 3.3 namespaces.
Morten:
- * Quiet xml parsing a bit.
+ * Quiet xml parsing two bits.
--------------------------------------------------------------------------
libgsf 1.14.18
diff --git a/gsf/gsf-libxml.c b/gsf/gsf-libxml.c
index f56ddc2..4bfa0ff 100644
--- a/gsf/gsf-libxml.c
+++ b/gsf/gsf-libxml.c
@@ -541,6 +541,7 @@ typedef struct {
GSList *ns_stack;
GHashTable *ns_prefixes;
GPtrArray *ns_by_id;
+ GHashTable *ns_unknowns;
GSList *contents_stack;
gboolean initialized;
gint unknown_depth; /* handle recursive unknown tags */
@@ -658,6 +659,7 @@ gsf_xml_in_start_element (GsfXMLInInternal *state, xmlChar const *name, xmlChar
GSList *ptr;
char const *tmp;
int i;
+ gboolean complain = TRUE;
/* Scan for namespace declarations. Yes it is ugly to have the api
* flag that its children can declare namespaces. However, given that a
@@ -703,6 +705,8 @@ gsf_xml_in_start_element (GsfXMLInInternal *state, xmlChar const *name, xmlChar
}
if (NULL == tmp) {
+ char *s = g_strdup (ns_ptr[0] + 6);
+ g_hash_table_replace (state->ns_unknowns, s, s);
if (gsf_debug_flag ("ns"))
g_warning ("Unknown namespace uri = '%s'", ns_ptr[1]);
}
@@ -741,6 +745,17 @@ gsf_xml_in_start_element (GsfXMLInInternal *state, xmlChar const *name, xmlChar
if (state->unknown_depth++ > 0)
return;
+ tmp = strchr (name, ':');
+ if (tmp) {
+ char *nsstr = g_strndup (name, tmp - (const char *)name);
+ if (g_hash_table_lookup (state->ns_unknowns, nsstr))
+ complain = FALSE;
+ g_free (nsstr);
+ }
+
+ if (!complain)
+ return;
+
g_printerr ("Unexpected element '%s' in state : \n\t", name);
ptr = state->pub.node_stack = g_slist_reverse (state->pub.node_stack);
if (ptr != NULL) /* skip toplevel catch all */
@@ -872,6 +887,9 @@ gsf_xml_in_start_document (GsfXMLInInternal *state)
state->ns_prefixes = g_hash_table_new_full (
g_str_hash, g_str_equal,
g_free, (GDestroyNotify) gsf_free_xmlinnsinstance);
+ state->ns_unknowns = g_hash_table_new_full (
+ g_str_hash, g_str_equal,
+ g_free, NULL);
state->contents_stack = NULL;
state->from_unknown_handler = FALSE;
}
@@ -889,6 +907,9 @@ gsf_xml_in_end_document (GsfXMLInInternal *state)
g_hash_table_destroy (state->ns_prefixes);
state->ns_prefixes = NULL;
+ g_hash_table_destroy (state->ns_unknowns);
+ state->ns_unknowns = NULL;
+
state->initialized = FALSE;
if (state->pub.node != &state->pub.doc->root_node->pub) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]