* Digging information out of parsed XML
@ 2003-05-14 15:35 Mark A. Hershberger
0 siblings, 0 replies; only message in thread
From: Mark A. Hershberger @ 2003-05-14 15:35 UTC (permalink / raw)
I'm trying to build a parser that can handle some simple XPath
statements for XML parsed by xml.el.
For example, given the following XML:
<top>
<middle>
<bottom>3<stop/>4</bottom>
</middle>
<middle>
<bottom>5</bottom>
</middle>
</top>
xml.el turns this into something like
((top nil
(middle nil
(bottom nil "3"
(stop nil
(""))
"4"))
(middle nil
(bottom nil "5"))))
I want to evaluate the XPath expression "/tob/middle/bottom/text()"
and have it return
("3" "4" "5")
However, what I get is
((("3" "4")) (("5")))
Can someone help me pull those out into a nice list?
Here is xpath-eval:
(defun xpath-eval (xml path)
"Given XML and PATH, return the results of the XPath query."
(cond
((stringp xml)
(when (string-equal (substring path 0 7) "/text()")
xml))
((listp (car xml))
(xpath-eval (car xml) path))
((string-equal (substring path 0 1) "/")
(let* ((pos (string-match "/" path 1))
(search-for (intern
(substring path 1 pos))))
(when (eq (car xml) search-for)
(cond ((not pos) xml)
(t
(delq nil (mapcar
(lambda (slice)
(xpath-eval slice
(substring path pos)))
(cddr xml))))))))))
--
As long as you have mystery you have health; when you destroy mystery
you create morbidity. -- G.K. Chesterson
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-05-14 15:35 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-14 15:35 Digging information out of parsed XML Mark A. Hershberger
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.