ラケットの 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 式を使用するべきではないかもしれませんが、それがどのように機能するかを理解し、使用するバージョンを自分で決定したいと考えています。