I usually use the SXML-related tools in PLaneT, rather than the "xexpr" ones. They are a little tricky to get started with (I plan to improve this situation soon), so here is a simple demonstration using your example, to get you started:

---- Begin Example ----

#lang racket/base

(require (only-in racket/port call-with-input-string)
        (only-in (planet lizorkin/ssax:2:0/ssax) ssax:xml->sxml)
        (only-in (planet jim/sxml-match:1:1/sxml-match) sxml-match))

(define xmlin "
<doc>
<name>Some software</name>
<more licence='gpl' checked='2010-12-10'/>
<ref id='someref'/>
<author id='John Doe'/>
</doc>")

(define sxml (call-with-input-string xmlin
                                    (lambda (in)
                                      (ssax:xml->sxml in '()))))

sxml
;; ==> (*TOP* (doc (name "Some software")
;;                 (more (@ (licence "gpl")
;;                          (checked "2010-12-10")))
;;                 (ref (@ (id "someref")))
;;                 (author (@ (id "John Doe")))))

(sxml-match (cadr sxml)
           ((doc (name ,name)
                 (more (@ (licence ,licence)
                          (checked ,checked)))
                 (ref (@ (id ,ref)))
                 (author (@ (id ,author))))
            (format "The author is ~A." author)))
;; ==> "The author is John Doe."

---- End Example ----

Note that, in practice, you will mix these SXML tools with low-level list-processing tools. For a simple example, in the example above I used "cadr" as a convenient way to get the first (and only) top-level SXML element.

--
http://www.neilvandyke.org/
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to