我正在尝试使用cxml-stp包搜索HTML,并且失败了。
* (cxml:parse "<html><body><table><tr><td/></tr><tr><td/></tr></table></body></html>" (stp:make-builder))
#.(CXML-STP-IMPL::DOCUMENT
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type DOCUMENT |#
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:LOCAL-NAME "td"))
:LOCAL-NAME "tr")
#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:CHILDREN '(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:LOCAL-NAME "td"))
:LOCAL-NAME "tr"))
:LOCAL-NAME "table"))
:LOCAL-NAME "body"))
:LOCAL-NAME "html")))
* (stp:find-recursively (stp:of-name "td") document)
NIL
* (stp:filter-recursively (stp:of-name "td") document)
NIL
我不太确定我在这里做错了什么。 cxml:parse的返回值似乎完全合理,这让我相信我正在调用stp:find-recursively和stp:filter-recursively错误。
有人可以指出我正确的方向吗? docs说这应该有效:
(stp:filter-recursively (stp:of-name "foo") node)
FWIW,我正在通过Quicklisp加载我的应用程序所需的所有软件包:
(ql:quickload '("drakma" "closure-html" "cxml-stp"))
答案 0 :(得分:2)
适合我:
CL-USER> (stp:filter-recursively (stp:of-name "td") (cxml:parse "<html><body><table><tr><td/></tr><tr><td/></tr></table></body></html>" (stp:make-builder)))
(#.(CXML-STP:ELEMENT #| :PARENT of type ELEMENT |# :LOCAL-NAME "td")
#.(CXML-STP:ELEMENT #| :PARENT of type ELEMENT |# :LOCAL-NAME "td"))