3
我在解析xml輸入時使用:content鍵提取值後,無法找出元素是什麼。鑑於以下解析的xml輸入,我如何提取所有內容鍵的值?如何從xml.data解析的輸入中解析鍵值
#clojure.data.xml.Element{ :tag :Header, :attrs {}, :content ( #clojure.data.xml.Element{ :tag :ExportType, :attrs {}, :content ("Tamper Export")} #clojure.data.xml.Element{ :tag :CurrentDateTime, :attrs {}, :content ("2012-06-26T15:40:22.063")} #clojure.data.xml.Element{ :tag :ScheduledDateTime, :attrs {}, :content ("2012-06-25T00:00:00")} #clojure.data.xml.Element{ :tag :ExportGuid, :attrs {}, :content ("{06643D9B-DCD3-459B-86A6-D21B20A03576}")} #clojure.data.xml.Element{ :tag :FractionalReadIndicator, :attrs {}, :content ("1")})}
這個輸出是通過解析使用data.xml中的xml文件創建,然後使用
(first (:content parsed-xml-input))
謝謝提取。
下面給我的只是設備類型和設備ID,它只是xml文件中的一部分內容。 <DeviceId>80580608</DeviceId><DeviceType>43</DeviceType>
(defn extract-inner-map-val
"Returns a map of embedded :content tag and value."
[item]
(let [key-elem (-> item :content first)
val-elem (-> item :content second)]
[(-> key-elem :content first)
(-> val-elem :content first)]))
(defn extract-content-from-map
"Accepts a sequence of values associated with a map key,
and transforms them into a map of key/value pairs."
[parsed-map]
(into {} (map extract-inner-map-val (:content parsed-map))))
謝謝。我會試試這個。我有一個先前的解決方案,我將編輯原始帖子以反映使用。它給了我一部分數據。 – octopusgrabbus
你在導致你考慮樹狀seq的數據中看到了什麼? – octopusgrabbus
我通常使用zippers來解析xml,因爲xml是一個map的樹(至少在它被解析之後)。在這種情況下,我只需要簡單地遍歷樹,所以拉鍊似乎過度殺傷。一般來說,我傾向於將任何具有兩層以上嵌套的東西視爲樹。 –