Поиск xml в Clojure

У меня есть следующий образец 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которого является "Красная секция"

Спасибо

11
задан pistacchio 18 July 2012 в 09:09
поделиться