Dites, je suis en train d'analyser un flux RSS et je veux en extraire un sous-ensemble d'informations.Façon idiomatique de construire une structure personnalisée à partir de la fermeture éclair XML dans Clojure
(def feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse))
Je peux obtenir des liens et des titres séparément:
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)
Cependant, je ne peux pas comprendre la façon de les extraire en même temps sans traverser la fermeture plus d'une fois, par exemple
(let [feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse)]
(zipmap
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)))
... ou une variante de celui-ci, impliquant la cartographie des séquences multiples à une fonction qui construit de manière incrémentielle une carte avec, par exemple, assoc
.
Non seulement je dois traverser la séquence plusieurs fois, mais les séquences ont aussi des états séparés, donc les éléments doivent être "alignés", pour ainsi dire. C'est-à-dire, dans un cas plus complexe que le RSS, un sous-élément peut manquer dans un élément particulier, en raccourcissant l'une des séquences de un (il n'y a pas d'espace). Le résultat peut donc être incorrect.
Existe-t-il un meilleur moyen ou est-ce, en fait, le comme vous le faites dans Clojure?