У меня есть следующий пример xml:
<data>
<products>
<product>
<section>Red Section</section>
<images>
<image>img.jpg</image>
<image>img2.jpg</image>
</images>
</product>
<product>
<section>Blue Section</section>
<images>
<image>img.jpg</image>
<image>img3.jpg</image>
</images>
</product>
<product>
<section>Green Section</section>
<images>
<image>img.jpg</image>
<image>img2.jpg</image>
</images>
</product>
</products>
</data>
Я знаю, как разбирать его в Clojure
(require '[clojure.xml :as xml])
(def x (xml/parse 'location/of/that/xml'))
Это возвращает вложенную карту, описывающую xml
{:tag :data,
:attrs nil,
:content [
{:tag :products,
:attrs nil,
:content [
{:tag :product,
:attrs nil,
:content [] ..
Эта структура, конечно, может быть пройдена со стандартными функциями Clojure, но она может оказаться действительно многословной, особенно если сравнивать ее, например, с запросом XPath. Есть ли помощник для прохождения и поиска такой структуры? Как я могу, например,
- получить список всех
<product>
- получить только продукт, тэг
<images>
содержит<image>
с текстом "img2.jpg" - получить продукт, чей
section
- "Красный раздел"
Спасибо