diff --git a/README.html b/README.html
index 7cf434a..90d5d0b 100644
--- a/README.html
+++ b/README.html
@@ -111,8 +111,10 @@
- Serialization fixes (thanks to Nathan Bird, Donavon Keithley).
- characters.lisp cleanup (thanks to Nathan Bird).
+ - Namespace normalizer bugfixes.
- Minor changes: clone-node on document as an extension. DOM
- class hierarchy reworked. New function parse-empty-document.
+ class hierarchy reworked. New function parse-empty-document.
+ Fixed the DOM serializer to not throw away local names.
rel-2006-01-05
diff --git a/dom/dom-sax.lisp b/dom/dom-sax.lisp
index 248586c..4d15d6a 100644
--- a/dom/dom-sax.lisp
+++ b/dom/dom-sax.lisp
@@ -88,6 +88,7 @@
(push
(sax:make-attribute :qname (dom:name a)
:value (dom:value a)
+ :local-name (dom:local-name a)
:namespace-uri (dom:namespace-uri a)
:specified-p (dom:specified a))
results)))
diff --git a/xml/xmlns-normalizer.lisp b/xml/xmlns-normalizer.lisp
index 5ae2d79..60cb51b 100644
--- a/xml/xmlns-normalizer.lisp
+++ b/xml/xmlns-normalizer.lisp
@@ -38,6 +38,8 @@
:chained-handler chained-handler))
(defun normalizer-find-prefix (handler prefix)
+ (when (zerop (length prefix))
+ (setf prefix #"xmlns"))
(block t
(dolist (bindings (xmlns-stack handler))
(dolist (attribute bindings)
@@ -54,7 +56,7 @@
(return-from t attribute))))))
(defun make-xmlns-attribute (prefix uri)
- (if prefix
+ (if (and (plusp (length prefix)) (not (equal prefix #"xmlns")))
(sax:make-attribute
:qname (concatenate 'rod #"xmlns:" prefix)
:namespace-uri *xmlns-namespace*
@@ -112,7 +114,7 @@
(rename-attribute
a
(sax:attribute-local-name uri-binding)))
- ((null prefix-binding)
+ ((and prefix (null prefix-binding))
(push-namespace prefix u))
(t
(loop