+Thu May 31 12:38:08 PDT 2007 WIlliam Brack <wbrack@mmm.com.hk>
+
+ * libxslt/xslt.c: fixed obscure namespace problem related to
+ exclude-result-prefix
+
Mon May 7 00:14:28 HKT 2007 William Brack <wbrack@mmm.com.hk>
* libxslt/transform.c: fixed minor compilation warning; no change
}
if ((cur->nsDef != NULL) && (style->exclPrefixNr > 0)) {
- xmlNsPtr ns = cur->nsDef, prev = NULL, next;
+ xmlNsPtr ns = cur->nsDef, prev = NULL, next, rns;
xmlNodePtr root = NULL;
int i, moved;
if ((ns->prefix != NULL) &&
(xmlStrEqual(ns->href,
style->exclPrefixTab[i]))) {
- /*
- * Move the namespace definition on the root
- * element to avoid duplicating it without
- * loosing it.
- */
+ /* Remove the namespace from this node */
if (prev == NULL) {
cur->nsDef = ns->next;
} else {
prev->next = ns->next;
}
- ns->next = root->nsDef;
- root->nsDef = ns;
+ /*
+ * If this prefix is not already present,
+ * move the namespace definition on the root
+ * element to avoid duplicating it without
+ * loosing it.
+ */
+ for (rns = root->nsDef; rns != NULL; rns = rns->next)
+ if (xmlStrEqual(ns->prefix, rns->prefix))
+ break;
+ if (rns == NULL) {
+ ns->next = root->nsDef;
+ root->nsDef = ns;
+ }
+ else
+ xmlFreeNs(ns);
moved = 1;
break;
}