Clojure:创建从记录中提取的值列表

Bil*_*ien 1 xml clojure

我有一个类型为"clojure.data.xml.Element"的数据结构,看起来像这样(漂亮打印):

{:tag :eSearchResult,
 :attrs {},
 :content
 ({:tag :Count, :attrs {}, :content ("16")}
  {:tag :RetMax, :attrs {}, :content ("16")}
  {:tag :RetStart, :attrs {}, :content ("0")}
  {:tag :IdList,
   :attrs {},
   :content
   ({:tag :Id, :attrs {}, :content ("28911150")}
    {:tag :Id, :attrs {}, :content ("28899394")}
    {:tag :Id, :attrs {}, :content ("28597238")}
    {:tag :Id, :attrs {}, :content ("28263281")}
    {:tag :Id, :attrs {}, :content ("28125459")}
    {:tag :Id, :attrs {}, :content ("26911135")}
    {:tag :Id, :attrs {}, :content ("26699345")}
    {:tag :Id, :attrs {}, :content ("26297102")}
    {:tag :Id, :attrs {}, :content ("26004019")}
    {:tag :Id, :attrs {}, :content ("25995331")}
    {:tag :Id, :attrs {}, :content ("25429093")}
    {:tag :Id, :attrs {}, :content ("25355095")}
    {:tag :Id, :attrs {}, :content ("25224593")}
    {:tag :Id, :attrs {}, :content ("24816246")}
    {:tag :Id, :attrs {}, :content ("24779721")}
    {:tag :Id, :attrs {}, :content ("24740865")})}
Run Code Online (Sandbox Code Playgroud)

如何从这些记录中提取ID?换句话说,创建一个获取此数据结构并返回Id字符串列表的函数("28911150""28899394"......)?

谢谢.

Sva*_*nte 6

您可以使用Clojure的基本数据访问器实现这一目标:

(->> data                            ; the input
     :content                        ; the content list
     (filter #(= :IdList (:tag %)))  ; only the IdLists
     (mapcat :content)               ; their content as one list
     (filter #(= :Id (:tag %)))      ; only the Ids
     (mapcat :content))              ; one long list of the strings therein
Run Code Online (Sandbox Code Playgroud)