From a43a12e28c008a3badfcfd8eef1b531769997b70 Mon Sep 17 00:00:00 2001 From: "William M. Brack" Date: Thu, 31 May 2007 19:40:11 +0000 Subject: [PATCH] fixed obscure namespace problem related to exclude-result-prefix * libxslt/xslt.c: fixed obscure namespace problem related to exclude-result-prefix svn path=/trunk/; revision=1429 --- ChangeLog | 5 +++++ libxslt/xslt.c | 25 +++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index b5fe078..1facc3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu May 31 12:38:08 PDT 2007 WIlliam Brack + + * libxslt/xslt.c: fixed obscure namespace problem related to + exclude-result-prefix + Mon May 7 00:14:28 HKT 2007 William Brack * libxslt/transform.c: fixed minor compilation warning; no change diff --git a/libxslt/xslt.c b/libxslt/xslt.c index bead6db..b0b3160 100644 --- a/libxslt/xslt.c +++ b/libxslt/xslt.c @@ -3469,7 +3469,7 @@ xsltPrecomputeStylesheet(xsltStylesheetPtr style, xmlNodePtr cur) } 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; @@ -3482,18 +3482,27 @@ xsltPrecomputeStylesheet(xsltStylesheetPtr style, xmlNodePtr cur) 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; } -- 2.7.4