diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2007-06-07 00:20:07 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2007-06-07 00:20:07 +0000 |
| commit | 4b5d13297286ec722c304ff41579bf8a819d3fff (patch) | |
| tree | 9588cc3479180bfb77da926b16106262a17cde46 | |
| parent | ce561aa93748beebdc94c34e86deeefdbcd416cf (diff) | |
extended xml_insure_namespace so it creates the namespace itself, after having
looked for a preexisting namespace; the function was previously called with ns
== NULL, which caused namespace to be *removed* from elements (ns was NULL
because xmlNewNs will return NULL when the namespace is already defined).
| -rw-r--r-- | lasso/xml/id-wsf-2.0/dstref_query.c | 7 | ||||
| -rw-r--r-- | lasso/xml/id-wsf-2.0/dstref_query_response.c | 7 | ||||
| -rw-r--r-- | lasso/xml/private.h | 3 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 15 |
4 files changed, 22 insertions, 10 deletions
diff --git a/lasso/xml/id-wsf-2.0/dstref_query.c b/lasso/xml/id-wsf-2.0/dstref_query.c index 3746e36c..5f6e2d22 100644 --- a/lasso/xml/id-wsf-2.0/dstref_query.c +++ b/lasso/xml/id-wsf-2.0/dstref_query.c @@ -60,12 +60,11 @@ static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; - xmlNs *ns; xmlnode = parent_class->get_xmlNode(node, lasso_dump); - ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY(node)->hrefServiceType, - (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY(node)->prefixServiceType); - xml_insure_namespace(xmlnode, ns, TRUE); + xml_insure_namespace(xmlnode, NULL, TRUE, + LASSO_IDWSF2_DSTREF_QUERY(node)->hrefServiceType, + LASSO_IDWSF2_DSTREF_QUERY(node)->prefixServiceType); return xmlnode; } diff --git a/lasso/xml/id-wsf-2.0/dstref_query_response.c b/lasso/xml/id-wsf-2.0/dstref_query_response.c index f497b7fb..82fb3b25 100644 --- a/lasso/xml/id-wsf-2.0/dstref_query_response.c +++ b/lasso/xml/id-wsf-2.0/dstref_query_response.c @@ -60,11 +60,12 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlNs *ns; + char *ns_href; xmlnode = parent_class->get_xmlNode(node, lasso_dump); - ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->hrefServiceType, - (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->prefixServiceType); - xml_insure_namespace(xmlnode, ns, TRUE); + xml_insure_namespace(xmlnode, NULL, TRUE, + LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->hrefServiceType, + LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->prefixServiceType); return xmlnode; } diff --git a/lasso/xml/private.h b/lasso/xml/private.h index 2a239722..bb266131 100644 --- a/lasso/xml/private.h +++ b/lasso/xml/private.h @@ -119,7 +119,8 @@ int lasso_sign_node(xmlNode *xmlnode, const char *id_attr_name, const char *id_v void xmlCleanNs(xmlNode *root_node); -void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force); +void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force, + char *ns_href, char *ns_prefix); gchar* lasso_node_build_deflated_query(LassoNode *node); diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index dde38a39..2fdc451e 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -2337,14 +2337,25 @@ xmlCleanNs(xmlNode *root_node) } void -xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force) +xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force, char *ns_href, char *ns_prefix) { xmlNode *t = xmlnode->children; + if (ns == NULL) { + for (ns = xmlnode->nsDef; ns; ns = ns->next) { + if (strcmp(ns->href, ns_href) == 0) { + break; + } + } + if (ns == NULL) { + ns = xmlNewNs(xmlnode, ns_href, ns_prefix); + } + } + xmlSetNs(xmlnode, ns); while (t) { if (t->type == XML_ELEMENT_NODE && (force == TRUE || t->ns == NULL)) { - xml_insure_namespace(t, ns, force); + xml_insure_namespace(t, ns, force, NULL, NULL); } t = t->next; } |
