namespace normalization

This commit is contained in:
dlichteblau
2005-12-11 23:56:45 +00:00
parent 2b5b61baf1
commit 5363dadbb8
8 changed files with 205 additions and 39 deletions

View File

@ -50,18 +50,6 @@
(dom:namespace-uri node)))
(setf (slot-value node 'prefix) newval))
(defmethod (setf dom:prefix) :before (newval (node attribute))
(when (rod= (dom:node-name node) #"xmlns")
(dom-error :NAMESPACE_ERR "must not change xmlns attribute prefix")))
(defmethod (setf dom:prefix) :after (newval (node attribute))
(setf (slot-value node 'name)
(concatenate 'rod newval #":" (dom:local-name node))))
(defmethod (setf dom:prefix) :after (newval (node element))
(setf (slot-value node 'tag-name)
(concatenate 'rod newval #":" (dom:local-name node))))
(defclass document (node)
((doc-type :initarg :doc-type :reader dom:doctype)
(dtd :initform nil :reader dtd)
@ -78,6 +66,14 @@
(owner-element :initarg :owner-element :reader dom:owner-element)
(specified-p :initarg :specified-p :reader dom:specified)))
(defmethod (setf dom:prefix) :before (newval (node attribute))
(when (rod= (dom:node-name node) #"xmlns")
(dom-error :NAMESPACE_ERR "must not change xmlns attribute prefix")))
(defmethod (setf dom:prefix) :after (newval (node attribute))
(setf (slot-value node 'name)
(concatenate 'rod newval #":" (dom:local-name node))))
(defmethod print-object ((object attribute) stream)
(print-unreadable-object (object stream :type t :identity t)
(format stream "~A=~S"
@ -88,6 +84,10 @@
((tag-name :initarg :tag-name :reader dom:tag-name)
(attributes :initarg :attributes :reader dom:attributes)))
(defmethod (setf dom:prefix) :after (newval (node element))
(setf (slot-value node 'tag-name)
(concatenate 'rod newval #":" (dom:local-name node))))
(defmethod print-object ((object element) stream)
(print-unreadable-object (object stream :type t :identity t)
(princ (rod-string (dom:tag-name object)) stream)))

View File

@ -1,6 +1,8 @@
(in-package :cxml)
(defun %unparse-document (sink doc canonical)
(when sax:*namespace-processing*
(setf sink (cxml:make-namespace-normalizer sink)))
(dom:map-document sink
doc
:include-doctype (if (and canonical (>= canonical 2))