条件を満すノードを探したい:cxml stp - lisp-cookbook-ja/common-lisp GitHub Wiki
このページでは、CLiki:plexippus-xpathを組み合せる例を紹介しています
(ql:quickload :xpath)
XML文章構築
(defparameter *doc*
(cxml:parse
"<a xmlns='http://tips.lisp-users.org/common-lisp'><b>1</b><b>1</b><b>9</b><c>2</c></a>"
(stp:make-builder)))
xpathで内容が1である要素bを探し、個数をカウントする
(xpath:with-namespaces (("x" "http://tips.lisp-users.org/common-lisp"))
(length (xpath:all-nodes (xpath:evaluate "//x:b[.=1]" *doc*))))
;=> 2
xpathは使わず、cxml-stpパッケージの関数のみでの実現
(length
(stp:filter-recursively (lambda (c)
(and (typep c 'stp:element)
(string= "b" (stp:local-name c))
(string= (stp:string-value c) "1") ))
*doc* ))
;=> 2