From: Sam S. <sd...@gn...> - 2001-04-26 18:15:03
|
> * In message <200...@ha...> > * On the subject of "Re: xml.lisp" > * Sent on Thu, 26 Apr 2001 15:13:02 +0100 > * Honorable Dave Pearson <da...@da...> writes: > > On Thu, Apr 26, 2001 at 09:56:54AM -0400, Sam Steingold wrote: > > > > `xml-read-from-file' is the main entry point (there is a good reason it is > > autoloaded, you know :-) it returns the list of the objects in the XML > > file. try it on a simple XML file, see what it returns, make suggestions. > > what I'm not clear about is how you get at the values that are > returned. For example, reading the slashdot headline XML > <URL:http://slashdot.org/slashdot.xml> file: > > ,---- > | [5]> (setq x (cllib:xml-read-from-file "slashdot.xml")) > | [SNIP some messages] > | (#<cllib::xml-decl xml [version="1.0" encoding="ISO-8859-1" ?="true"] > | #x203CCAB9> > | #<cllib::xml-obj backslash [] 21 objects 1,716/2,221 chars #x203CCAF9>) > `---- > > such a file. [8]> (xml-read-from-file "d:/sds/slashdot.xml" :reset-ent nil) [WITH-XML-FILE] * [d:/sds/slashdot.xml 3,701 bytes]...done [entities(%/&): 0/251] [bytes: 3,701] [run: 0.200 sec] [real: 0.591 sec] * added XML namespace: #<cllib::xml-namespace "http://slashdot.org/backslash.dtd" "ns5125" 0 #x1A673BED> [prefix "backslash"] * new XML name: "backslash" * new XML name: "story" * new XML name: "title" * new XML name: "url" * new XML name: "time" * new XML name: "author" * new XML name: "department" * new XML name: "topic" * new XML name: "comments" * new XML name: "section" * new XML name: "image" (#<cllib::xml-decl xml [version="1.0" encoding="ISO-8859-1" ?="true"] #x1A638331> #<cllib::xml-obj backslash [] 21 objects 1,711/2,216 chars #x1A6383CD>) [9]> (setq /. (cadr *)) #<cllib::xml-obj backslash [] 21 objects 1,711/2,216 chars #x1A6383CD> [10]> (describe /.) #<cllib::xml-obj #1=#2=backslash [] 21 objects 1,711/2,216 chars #x1A636B75> is a structure of type cllib::xml-obj. As such, it is also a structure of type cllib::xml-tag. Slots: cllib::name = #1=#2="backslash" cllib::args = nil cllib::data = (" " #<cllib::xml-obj #1=#2=story [] 19 objects 157/207 chars #x1A636E05> " " #<cllib::xml-obj #1# [] 19 objects 195/245 chars #x1A637279> " " #<cllib::xml-obj #1# [] 19 objects 154/204 chars #x1A6375B1> " " #<cllib::xml-obj #1# [] 19 objects 180/230 chars #x1A637899> " " #<cllib::xml-obj #1# [] 19 objects 164/214 chars #x1A637BB1> " " #<cllib::xml-obj #1# [] 19 objects 160/210 chars #x1A637EAD> " " #<cllib::xml-obj #1# [] 19 objects 162/212 chars #x1A6381A1> " " #<cllib::xml-obj #1# [] 19 objects 161/211 chars #x1A638499> " " #<cllib::xml-obj #1# [] 19 objects 178/228 chars #x1A63878D> " " #<cllib::xml-obj #1# [] 19 objects 189/239 chars #x1A638AA5> " ") #1=#2="backslash" is a structure of type cllib::xml-name. Slots: cllib::ln = "backslash" cllib::ns = #1=#<cllib::xml-namespace "" "" 11 #x1A616955> "backslash" is a simple 1 dimensional array (vector) of characters, of size 9. #1=#<cllib::xml-namespace "" "" 11 #x1A616955> is a structure of type cllib::xml-namespace. Slots: cllib::uri = "" cllib::pre = "" cllib::nht = #1=#S(hash-table equal (#2="image" . #2#) (#3="section" . #3#) (#4="comments" . #4#) (#5="topic" . #5#) (#6="department" . #6#) (#7="author" . #7#) (#8="time" . #8#) (#9="url" . #9#) (#10="title" . #10#) (#11="story" . #11#) (#12="backslash" . #12#)) "" is a simple 1 dimensional array (vector) of characters, of size 0. "" is a simple 1 dimensional array (vector) of characters, of size 0. #1=#S(hash-table equal (#2="image" . #2#) (#3="section" . #3#) ...) is a hash table with 11 entries. nil is the empty list, the symbol nil, lies in #<package common-lisp>, is accessible in the packages CLLIB, CLOS, COMMON-LISP, COMMON-LISP-USER, EXT, FFI, LDAP, PORT, POSIX, SCREEN, SYSTEM, a constant, value: nil, names a type, has the properties system::instruction, system::type-symbol. For more information, evaluate (symbol-plist 'nil). #<package common-lisp> is the package named COMMON-LISP. It has the nicknames LISP, CL. It imports the external symbols of the package CLOS and exports 947 symbols to the packages CLLIB, PORT, LDAP, FFI, SCREEN, CLOS, POSIX, COMMON-LISP-USER, EXT, SYSTEM. nil [see above] (" " #<cllib::xml-obj #1=# [] 19 objects 157/207 chars #x1A636E05> " " ...) is a list of length 21. [11]> (in-package :cllib) #<package cllib> cllib[12]> (xmlo-data /.) *** - EVAL: variable /. has no value 1. Break cllib[13]> cllib[14]> (xmlo-data cl-user::/.) (" " #<xml-obj story [] 19 objects 157/207 chars #x1A636E05> " " #<xml-obj story [] 19 objects 195/245 chars #x1A637279> " " #<xml-obj story [] 19 objects 154/204 chars #x1A6375B1> " " #<xml-obj story [] 19 objects 180/230 chars #x1A637899> " " #<xml-obj story [] 19 objects 164/214 chars #x1A637BB1> " " #<xml-obj story [] 19 objects 160/210 chars #x1A637EAD> " " #<xml-obj story [] 19 objects 162/212 chars #x1A6381A1> " " #<xml-obj story [] 19 objects 161/211 chars #x1A638499> " " #<xml-obj story [] 19 objects 178/228 chars #x1A63878D> " " #<xml-obj story [] 19 objects 189/239 chars #x1A638AA5> " ") cllib[15]> (describe (second (xmlo-data cl-user::/.))) #<xml-obj #1=#2=story [] 19 objects 157/207 chars #x1A636C6D> is a structure of type xml-obj. As such, it is also a structure of type xml-tag. Slots: name = #1=#2="story" args = nil data = (" " #<xml-obj #1=#2=title [] 1 object 22/27 chars #x1A636CBD> " " #<xml-obj #3=#4=url [] 1 object 51/56 chars #x1A636D3D> " " #<xml-obj #5=#6=time [] 1 object 19/24 chars #x1A636DF9> " " #<xml-obj #7=#8=author [] 1 object 7/12 chars #x1A636E79> " " #<xml-obj #9=#10=department [] 1 object 24/29 chars #x1A636EE5> " " #<xml-obj #11=#12=topic [] 1 object 4/9 chars #x1A636F6D> " " #<xml-obj #13=#14=comments [] 1 object 2/7 chars #x1A636FCD> " " #<xml-obj #15=#16=section [] 1 object 5/10 chars #x1A637029> " " #<xml-obj #17=#18=image [] 1 object 13/18 chars #x1A63708D> " ") #1=#2="story" is a structure of type xml-name. Slots: ln = "story" ns = #1=#<xml-namespace "" "" 11 #x1A616955> "story" is a simple 1 dimensional array (vector) of characters, of size 5. #1=#<xml-namespace "" "" 11 #x1A616955> is a structure of type xml-namespace. Slots: uri = "" pre = "" nht = #1=#S(hash-table equal (#2="image" . #2#) (#3="section" . #3#) (#4="comments" . #4#) (#5="topic" . #5#) (#6="department" . #6#) (#7="author" . #7#) (#8="time" . #8#) (#9="url" . #9#) (#10="title" . #10#) (#11="story" . #11#) (#12="backslash" . #12#)) "" is a simple 1 dimensional array (vector) of characters, of size 0. "" is a simple 1 dimensional array (vector) of characters, of size 0. #1=#S(hash-table equal (#2="image" . #2#) (#3="section" . #3#) ...) is a hash table with 11 entries. nil is the empty list, the symbol nil, lies in #<package common-lisp>, is accessible in the packages CLLIB, CLOS, COMMON-LISP, COMMON-LISP-USER, EXT, FFI, LDAP, PORT, POSIX, SCREEN, SYSTEM, a constant, value: nil, names a type, has the properties system::instruction, system::type-symbol. For more information, evaluate (symbol-plist 'nil). #<package common-lisp> is the package named COMMON-LISP. It has the nicknames LISP, CL. It imports the external symbols of the package CLOS and exports 947 symbols to the packages CLLIB, PORT, LDAP, FFI, SCREEN, CLOS, POSIX, COMMON-LISP-USER, EXT, SYSTEM. nil [see above] (" " #<xml-obj #1=#2=title [] 1 object 22/27 chars #x1A636CBD> " " ...) is a list of length 19. cllib[16]> (mapcar (compose car xmlo-data second xmlo-data) (delete-if-not #'xml-obj-p (xmlo-data cl-user::/.))) ("Data Munging with Perl" "SDMI Researchers Cancel Presentation After RIAA Threat" "1TB In A Cubic Centimeter" "Linux for the PlayStation2:It's Official" "Space Station BSOD" "Have the Baby Bells won?" "Spectator Gaming, Multicast Style" "High-End VR QuakeIII Arena" "Building Big Sites on a Budget" "Loaded, Low Mileage, Very Clean, A/C, Sunroof") I will export the necesasry accessors from CLLIB. You might want to set *print-readably* to T so that you will see what kind of objects you are getting. -- Sam Steingold (http://www.podval.org/~sds) Support Israel's right to defend herself! <http://www.i-charity.com/go/israel> Read what the Arab leaders say to their people on <http://www.memri.org/> nobody's life, liberty or property are safe while the legislature is in session |