Page 1 of 1

xml stuff

Posted: Tue Feb 01, 2005 2:08 am
by tom
hey guys,

can someone give me a brief tutorial on how to output xml from newlisp? I'm pretty sure I can get sxml out of xml, but how do I go the other direction? I want to write xml, only I want to write it in newlisp.

Thanks!

Posted: Tue Feb 01, 2005 3:47 am
by Lutz
This is a 'typical' LISP problem:

Code: Select all

;; translate s-expr to XML
;;
(define (expr2xml expr level)
  (cond 
    ((empty? expr) "")
    ((list? (first expr))
        (expr2xml (first expr) (+ level 1))
        (dolist (s (rest expr)) (expr2xml (list s) (+ level 1))))
    ((symbol? (first expr))
        (print (dup " " level))
        (println "<" (name (first expr)) ">")
        (dolist (s (rest expr)) (expr2xml (list s) (+ level 1)))
        (print (dup " " level))
        (println "</" (name (first expr)) ">"))
    ( true
        (print (dup " " level))
        (println (first expr)) ; unquoted
        ;; (println {"} (first expr) {"}) ; quoted
        (dolist (s (rest expr)) (expr2xml (list s) (+ level 1))))
     ))

;; a lisp expression for a person

(set 'expr 
    '(person 
         (name "John Doe") 
         (address 
             (street "Main Street")
             (city "Anytown"))))

;; translate to XML

(expr2xml expr 0)   =>

<person>
    <name>
      John Doe
    </name>
    <address>
        <street>
          Main Street
        </street>
        <city>
          Anytown
        </city>
    </address>
</person>

Lutz

ps: see and improved version at http://www.newlisp.org/index.cgi?page=Tips_and_Tricks