Оживший юзерпик (tobotras) wrote,

clojure и XML transformation

Попробовал zippers. Задача — поменять все <delta value="XXX"> на <delta value="0">:
(defn- zero-deltas [zip]
  (loop [loc zip]
    (if (zip/end? loc)
      loc
    (recur (zip/next (if (= (:tag (zip/node loc)) :delta)
   	                 (zip/edit loc #(assoc-in % [:attrs :value] "0"))
                         loc))))))

Всё хорошо, но непонятно, что можно вернуть из функции, чтобы можно было аналогичную звать дальшe:
(-> filename parse xml-zip 
    zero-deltas
    something-else)

Переписал на data.xml с рекурсивным беганием map-ами по :content. Омерзительно. В недоумении.

Upd: слава аллаху опенсорсу, я таки посмотрел в исходники clojure.zip. Они держат сопутствующие структуры в метаданных. Убиться веником.

Upd2: работает вот так, но недоумение остаётся:
  (if (zip/end? loc)
      (with-meta (vector (zip/root loc) nil) (meta zip))
Tags: clojure, печаль, программирование
  • Post a new comment

    Error

    default userpic
    default userpic

    Your IP address will be recorded  

  • 4 comments


[ Home | Update Journal | Recent Entries | Friends | Login / Logout | Search | Account | Site Map ]