From: Kab
Subject: s-exp to xml?!?
Date: 
Message-ID: <2004121610194412879@mynewsgate.net>
Hi everyone,
someone know if exists any function that translates a Lisp list in a XML
document? I find only the inverse function (xml-to-sexp).
Thank you,
Andrea

Inviato da www.mynewsgate.net

From: ·········@gmail.com
Subject: Re: s-exp to xml?!?
Date: 
Message-ID: <1103220315.199450.200990@c13g2000cwb.googlegroups.com>
xmls <http://common-lisp.net/project/xmls/> can go both ways. Its PARSE
and WRITE-XML functions are the ones you're talking about.

That said, though, I do have some reservations about xmls. Its error
handling leaves something to be desired IIRC, and its sexp syntax
should be changed. There are probably similar things in other XML
parsers, but I haven't looked carefully enough.

-Peter Scott
From: Pascal Bourguignon
Subject: Re: s-exp to xml?!?
Date: 
Message-ID: <87llby4ixc.fsf@thalassa.informatimago.com>
"Kab" <············@mynewsgate.net> writes:

> Hi everyone,
> someone know if exists any function that translates a Lisp list in a XML
> document? I find only the inverse function (xml-to-sexp).
> Thank you,
> Andrea

Well, it's so easy to write:

(defun sexp-to-xml (sexp)
    (cond
        ((null sexp) "")
        ((symbolp sexp) (format nil "<symbol>~S</symbol>" sexp))
        ((stringp sexp) (format nil "<string>~S</string>" sexp))
        ((numberp sexp) (format nil "<number>~S</number>" sexp))
        ((atom    sexp) (format nil "<atom>~S</atom>" sexp))
        (t (format nil "<list>~%~{<item>~A</item>~%~}</list>~%" 
                (mapcar (function sexp-to-xml) sexp)))))

                            
(princ (sexp-to-xml '(defun sexp-to-xml (sexp)
    (cond
        ((null sexp) "")
        ((atom sexp) (format nil "~A" sexp))
        (t (format t "<~A>~A</~A>" 
                (car sexp) (sexp-to-xml (cdr sexp)) (car sexp)))))))

<list>
<item><symbol>DEFUN</symbol></item>
<item><symbol>SEXP-TO-XML</symbol></item>
<item>
<list>
<item><symbol>SEXP</symbol></item>
</list>
</item>
<item>
<list>
<item><symbol>COND</symbol></item>
<item>
<list>
<item>
<list>
<item><symbol>NULL</symbol></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
<item><string>""</string></item>
</list>
</item>
<item>
<list>
<item>
<list>
<item><symbol>ATOM</symbol></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
<item>
<list>
<item><symbol>FORMAT</symbol></item>
<item></item>
<item><string>"~A"</string></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
</list>
</item>
<item>
<list>
<item><symbol>T</symbol></item>
<item>
<list>
<item><symbol>FORMAT</symbol></item>
<item><symbol>T</symbol></item>
<item><string>"<~A>~A</~A>"</string></item>
<item>
<list>
<item><symbol>CAR</symbol></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
<item>
<list>
<item><symbol>SEXP-TO-XML</symbol></item>
<item>
<list>
<item><symbol>CDR</symbol></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
</list>
</item>
<item>
<list>
<item><symbol>CAR</symbol></item>
<item><symbol>SEXP</symbol></item>
</list>
</item>
</list>
</item>
</list>
</item>
</list>
</item>
</list>


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
Cats meow out of angst
"Thumbs! If only we had thumbs!
We could break so much!"
From: Jim Newton
Subject: Re: s-exp to xml?!?
Date: 
Message-ID: <32fkeiF3l9cmrU1@individual.net>
hi Pascal, what advantage do you have in including
all the <item></item> tags in the output?
why not simply omit them?


<symbol>COND</symbol>
<list>
<list>
<symbol>NULL</symbol>
<symbol>SEXP</symbol>
</list>

...

instead of this?

  <item><symbol>COND</symbol></item>
  <item>
  <list>
  <item>
  <list>
  <item><symbol>NULL</symbol></item>
  <item><symbol>SEXP</symbol></item>
  </list>
  </item>


Pascal Bourguignon wrote:
> "Kab" <············@mynewsgate.net> writes:
> 
> 
>>Hi everyone,
>>someone know if exists any function that translates a Lisp list in a XML
>>document? I find only the inverse function (xml-to-sexp).
>>Thank you,
>>Andrea
> 
> 
> Well, it's so easy to write:
> 
> (defun sexp-to-xml (sexp)
>     (cond
>         ((null sexp) "")
>         ((symbolp sexp) (format nil "<symbol>~S</symbol>" sexp))
>         ((stringp sexp) (format nil "<string>~S</string>" sexp))
>         ((numberp sexp) (format nil "<number>~S</number>" sexp))
>         ((atom    sexp) (format nil "<atom>~S</atom>" sexp))
>         (t (format nil "<list>~%~{<item>~A</item>~%~}</list>~%" 
>                 (mapcar (function sexp-to-xml) sexp)))))
> 
>                             
> (princ (sexp-to-xml '(defun sexp-to-xml (sexp)
>     (cond
>         ((null sexp) "")
>         ((atom sexp) (format nil "~A" sexp))
>         (t (format t "<~A>~A</~A>" 
>                 (car sexp) (sexp-to-xml (cdr sexp)) (car sexp)))))))
> 
> <list>
> <item><symbol>DEFUN</symbol></item>
> <item><symbol>SEXP-TO-XML</symbol></item>
> <item>
> <list>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> <item>
> <list>
> <item><symbol>COND</symbol></item>
> <item>
> <list>
> <item>
> <list>
> <item><symbol>NULL</symbol></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> <item><string>""</string></item>
> </list>
> </item>
> <item>
> <list>
> <item>
> <list>
> <item><symbol>ATOM</symbol></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> <item>
> <list>
> <item><symbol>FORMAT</symbol></item>
> <item></item>
> <item><string>"~A"</string></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> </list>
> </item>
> <item>
> <list>
> <item><symbol>T</symbol></item>
> <item>
> <list>
> <item><symbol>FORMAT</symbol></item>
> <item><symbol>T</symbol></item>
> <item><string>"<~A>~A</~A>"</string></item>
> <item>
> <list>
> <item><symbol>CAR</symbol></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> <item>
> <list>
> <item><symbol>SEXP-TO-XML</symbol></item>
> <item>
> <list>
> <item><symbol>CDR</symbol></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> </list>
> </item>
> <item>
> <list>
> <item><symbol>CAR</symbol></item>
> <item><symbol>SEXP</symbol></item>
> </list>
> </item>
> </list>
> </item>
> </list>
> </item>
> </list>
> </item>
> </list>
> 
>