Nokogiri 的 clojure 等价物是什么(用于使用 xpath 和 css 选择器进行 xml 解析)

作者:编程家 分类: xml 时间:2025-07-25

Nokogiri是一个强大的XML解析器,它提供了使用XPath和CSS选择器进行XML解析的功能。在Clojure中,与Nokogiri等价的库是Enlive。Enlive是Clojure的一个功能强大的HTML/XML解析和转换库,它允许使用CSS选择器和XPath表达式来解析和操作XML文档。

Enlive提供了一种简单而直观的方式来处理XML数据。它使用一种基于模板的方法,可以对XML文档进行选择、修改和生成。通过使用CSS选择器和XPath表达式,我们可以轻松地定位和提取所需的数据。

使用Enlive进行XML解析

下面是一个简单的示例代码,演示了如何使用Enlive来解析XML文档并提取所需的数据。

clojure

(require '[net.cgrand.enlive-html :as html])

(def xml-data

"

Book 1

Author 1

10.99

Book 2

Author 2

15.99

")

(defn parse-xml [xml]

(html/html-resource (java.io.StringReader. xml)))

(defn get-books [xml]

(let [parsed-xml (parse-xml xml)]

(html/select parsed-xml [:bookstore :book])))

(defn get-book-details [book]

(let [title (html/select book [:title])

author (html/select book [:author])

price (html/select book [:price])]

{:title (html/text (first title))

:author (html/text (first author))

:price (html/text (first price))}))

(defn print-book-details [book]

(println "Title: " (:title book))

(println "Author: " (:author book))

(println "Price: $" (:price book)))

(let [books (get-books xml-data)]

(doseq [book books]

(let [book-details (get-book-details book)]

(print-book-details book-details))))

解析XML文档

首先,我们需要使用`parse-xml`函数将XML数据解析为Enlive库可以处理的格式。该函数接受一个XML字符串作为输入,并返回一个Enlive的解析结果。

选择并提取数据

使用`get-books`函数,我们可以从解析的XML文档中选择所有的书籍节点。该函数返回一个包含所有书籍节点的列表。

然后,我们可以使用`get-book-details`函数来提取每本书的详细信息。该函数接受一个书籍节点作为输入,并返回一个包含书籍标题、作者和价格的map。

打印书籍详细信息

最后,我们使用`print-book-details`函数来打印每本书的详细信息。该函数接受一个包含书籍详细信息的map作为输入,并将书籍的标题、作者和价格打印出来。

通过以上代码,我们可以轻松地使用Enlive库来解析XML文档,并提取所需的数据。Enlive提供了一个简单而强大的方式来处理XML数据,使得XML解析变得更加容易和灵活。无论是使用CSS选择器还是XPath表达式,Enlive都能满足我们的需求。