fixing bug #105116 sometimes one need to generate a default namespace
authorDaniel Veillard <veillard@src.gnome.org>
Tue, 4 Feb 2003 21:12:33 +0000 (21:12 +0000)
committerDaniel Veillard <veillard@src.gnome.org>
Tue, 4 Feb 2003 21:12:33 +0000 (21:12 +0000)
* libxslt/transform.c: fixing bug #105116 sometimes one need
  to generate a default namespace reset xmlns="" in the output
* tests/docs/Makefile.am tests/docs/bug-103.xml
  tests/general/Makefile.am tests/general/bug-103*: added the
  example in the regression tests for this case
Daniel

ChangeLog
libxslt/transform.c
tests/docs/Makefile.am
tests/docs/bug-103.xml [new file with mode: 0644]
tests/general/Makefile.am
tests/general/bug-103.out [new file with mode: 0644]
tests/general/bug-103.xsl [new file with mode: 0644]

index 7294cff..368d599 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Feb  4 22:10:17 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+       * libxslt/transform.c: fixing bug #105116 sometimes one need
+         to generate a default namespace reset xmlns="" in the output
+       * tests/docs/Makefile.am tests/docs/bug-103.xml
+         tests/general/Makefile.am tests/general/bug-103*: added the
+         example in the regression tests for this case
+
 Tue Feb  4 18:39:35 CET 2003 Daniel Veillard <daniel@veillard.com>
 
        * libxslt/pattern.c libxslt/transform.c: changed the way the
index 851bb77..5c4b33f 100644 (file)
@@ -713,10 +713,18 @@ xsltCopyNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
            if (node->nsDef != NULL)
                xsltCopyNamespaceList(ctxt, copy, node->nsDef);
        }
-       if (((node->type == XML_ELEMENT_NODE) ||
-            (node->type == XML_ATTRIBUTE_NODE)) &&
-           (node->ns != NULL)) {
-           copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy);
+       if ((node->type == XML_ELEMENT_NODE) ||
+            (node->type == XML_ATTRIBUTE_NODE)) {
+           if (node->ns != NULL)
+               copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy);
+           else if ((insert != NULL) && (insert->type == XML_ELEMENT_NODE) &&
+                    (insert->ns != NULL)) {
+               xmlNsPtr defaultNs;
+
+               defaultNs = xmlSearchNs(insert->doc, insert, NULL);
+               if (defaultNs != NULL)
+                   xmlNewNs(copy, BAD_CAST "", NULL);
+           }
        }
     } else {
        xsltTransformError(ctxt, NULL, node,
@@ -827,8 +835,18 @@ xsltCopyTree(xsltTransformContextPtr ctxt, xmlNodePtr node,
        /*
         * Add namespaces as they are needed
         */
-       if (node->ns != NULL) {
-           copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy);
+       if ((node->type == XML_ELEMENT_NODE) ||
+           (node->type == XML_ATTRIBUTE_NODE)) {
+           if (node->ns != NULL)
+               copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy);
+           else if ((insert != NULL) && (insert->type == XML_ELEMENT_NODE) &&
+                    (insert->ns != NULL)) {
+               xmlNsPtr defaultNs;
+
+               defaultNs = xmlSearchNs(insert->doc, insert, NULL);
+               if (defaultNs != NULL)
+                   xmlNewNs(copy, BAD_CAST "", NULL);
+           }
        }
        if (node->nsDef != NULL)
            xsltCopyNamespaceList(ctxt, copy, node->nsDef);
index 97e4bc2..4150027 100644 (file)
@@ -102,6 +102,7 @@ EXTRA_DIST =        \
        bug-100.xml \
        bug-101.xml \
        bug-102.xml \
+       bug-103.xml \
        character.xml \
        array.xml \
        items.xml
diff --git a/tests/docs/bug-103.xml b/tests/docs/bug-103.xml
new file mode 100644 (file)
index 0000000..f1999f8
--- /dev/null
@@ -0,0 +1 @@
+<foo/>
index 255c027..449a70f 100644 (file)
@@ -107,6 +107,7 @@ EXTRA_DIST = \
     bug-101.out bug-101.xsl \
     bug-102.out bug-102.xsl \
     bug-102-inc.out bug-102-inc.xsl \
+    bug-103.out bug-103.xsl \
     character.out character.xsl \
     character2.out character2.xsl \
     itemschoose.out itemschoose.xsl \
diff --git a/tests/general/bug-103.out b/tests/general/bug-103.out
new file mode 100644 (file)
index 0000000..7e1623c
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<report xmlns="http://examplotron.org/namespaces/example"><foo xmlns=""/></report>
diff --git a/tests/general/bug-103.xsl b/tests/general/bug-103.xsl
new file mode 100644 (file)
index 0000000..efa0f80
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" 
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+       >
+
+       <xsl:template match="/">
+               <report xmlns="http://examplotron.org/namespaces/example">
+                       <xsl:copy-of select="foo"/>
+               </report>
+       </xsl:template>
+       
+</xsl:stylesheet>
+