我正在从球拍中的 HTML 页面中提取信息。
为此,我使用了html-parsing和sxml包。
我想在页面中选择具有特定 id 的元素。我目前使用纯 XPath 表达式来执行此操作:
(require sxml)
(define expression
'(test (div (@ (id "foo")
(other-attr "bar"))
first-div-content)
(div (@ (id "baz")
(other-attr "quux"))
second-div-content)))
(define wanted-result
'((div (@ (id "foo") (other-attr "bar"))
first-div-content)))
(equal? ((sxpath "//div[@id='foo']") expression)
wanted-result)
; ==> #t
但是,正如文档所述:
txpath 函数接受标准的 XPath 语法,而 sxpath 函数以更惯用的(用于 Racket)方式构建。
所以,我想表达与 s 表达式相同的路径。虽然从给出的示例中很容易"//div"
变成'(// div)
,但我没有找到如何查询特定属性。我收集到我必须使用sxml-converter
or sxml-converter-as-predicate
,但不知道该怎么做。
我知道 xpath 版本工作得很好,也许我不应该费心使用 s-expressions,但我想了解它是如何工作的,然后自己决定使用哪个版本。