Need help with filtering elements and/or attributes
    Josef Wolf 
    jw at raven.inka.de
       
    Mon Jan 10 07:34:28 UTC 2022
    
    
  
Hello,
I am new to cxml and need some assistance to get started.
Thanks to https://common-lisp.net/project/cxml/quickstart.html, it is fairly
easy to read existing xml and write them back (almost) identical:
  (defun parse-dom (file)
    (cxml:parse file (cxml-dom:make-dom-builder)))
  (defun serialize-dom (file dom new-extension)
    (with-open-file (out (make-pathname :defaults file :type new-extension)
                         :direction :output
                         :if-exists :supersede
                         :element-type '(unsigned-byte 8))
      (write-sequence #(#xef #xbb #xbf) out)     ;; byte order mask
      (dom:map-document (cxml:make-octet-stream-sink out :encoding "utf-8")
                        dom)))
  (let ((file #p"some-file.xml"))
    (serialize-dom file
                   (parse-dom file)
                   "new-xml"))
with this, I can read a file and write it back. With
  diff -uw some-file.xml some-file.new-xml
I can confirm that those files are (semantically) identical.
But how do I go further? As a start, I would like to remove elements and/or
attributes while writing. From the docs, I seem to understand that this can be
done using sinks. But I just can't figure how to create my custom sink to do
the filtering. And three das googling did not reveal any
examples/howtos/tutorials.
Can somebody provide an example how to create a custom sink and which methods
can be specialized to do such filtering?
Thanx!
-- 
Josef Wolf
jw at raven.inka.de
    
    
More information about the cxml-devel
mailing list