条件を満すノードを探したい: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
⚠️ **GitHub.com Fallback** ⚠️