[cxml-devel] [PATCH] map-node now converts non-string attributes and values to strings

Daniel Lowe dlowe at dlowe.net
Tue Jan 10 17:59:03 UTC 2012


While switching over from using xmls, I ran into a few problems with the 
conversion.  Xmls will convert non-string attributes and values to strings, 
while cxml:map-node won't.  Here's a patch to fix that.

: Daniel :

---
  xml/xmls-compat.lisp |   18 ++++++++++--------
  1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/xml/xmls-compat.lisp b/xml/xmls-compat.lisp
index aa3d8bc..3804f8a 100644
--- a/xml/xmls-compat.lisp
+++ b/xml/xmls-compat.lisp
@@ -177,19 +177,21 @@
  (defun map-node/qnames (handler node include-xmlns-attributes)
    (sax:start-document handler)
    (labels ((walk (node)
-	     (when (node-ns node)
-	       (error "serializing without :INCLUDE-NAMESPACE-URI, but node ~
+             (when (node-ns node)
+               (error "serializing without :INCLUDE-NAMESPACE-URI, but node ~
                         was created with a namespace URI"))
               (let* ((attlist
-		     (compute-attributes/qnames node include-xmlns-attributes))
-		    (qname (string-rod (node-name node)))
+                     (compute-attributes/qnames node 
include-xmlns-attributes))
+                    (qname (string-rod (node-name node)))
                      (lname (nth-value 1 (cxml::split-qname qname))))
                 (sax:start-element handler nil lname qname attlist)
                 (dolist (child (node-children node))
                   (typecase child
                     (list (walk child))
                     ((or string rod)
-		    (sax:characters handler (string-rod child)))))
+                    (sax:characters handler (string-rod child)))
+                   (t
+                    (sax:characters handler (string-rod (princ-to-string 
child))))))
                 (sax:end-element handler nil lname qname))))
      (walk node))
    (sax:end-document handler))
@@ -212,7 +214,7 @@
  				       (string-rod lname))
  			    :local-name (string-rod lname)
  			    :namespace-uri uri
-			    :value (string-rod value)
+			    :value (string-rod (princ-to-string value))
  			    :specified-p t))
  			  (xmlnsp
  			   (sax:make-attribute
@@ -222,7 +224,7 @@
  					"xmlns"))
  			    :local-name (string-rod lname)
  			    :namespace-uri uri
-			    :value (string-rod value)
+			    :value (string-rod (princ-to-string value))
  			    :specified-p t))))))
                    (node-attrs node))))
  @@ -237,7 +239,7 @@
                        (if (or xmlnsp
  			      (not (cxml::xmlns-attr-p (string-rod name))))
                            (sax:make-attribute :qname (string-rod name)
-                                              :value (string-rod value)
+                                              :value (string-rod 
(princ-to-string value))
                                                :specified-p t)
                            nil)))
                    (node-attrs node))))
-- 
1.7.5.4





More information about the cxml-devel mailing list