如何解析键';从xml.data';解析输入

如何解析键';从xml.data';解析输入,xml,clojure,Xml,Clojure,在使用:content键提取值之后,我很难确定解析后的xml输入中的元素是什么。给定以下解析的xml输入,如何提取所有:content键的值 此输出是通过使用data.xml解析xml文件创建的,然后使用 (first (:content parsed-xml-input)) 多谢各位 下面只给出了设备类型和设备id,这只是xml文件中内容的一部分8058060843 这基本上可以归结为遍历树并选择所有:内容。使用clojure.zip(功能性拉链)可以做到这一点,还可以做更多的事情,不过在这

在使用:content键提取值之后,我很难确定解析后的xml输入中的元素是什么。给定以下解析的xml输入,如何提取所有:content键的值

此输出是通过使用data.xml解析xml文件创建的,然后使用

(first (:content parsed-xml-input))
多谢各位

下面只给出了设备类型和设备id,这只是xml文件中内容的一部分<代码>8058060843


这基本上可以归结为遍历树并选择所有:内容。使用clojure.zip(功能性拉链)可以做到这一点,还可以做更多的事情,不过在这种情况下,当你真正需要的只是一次树上散步时,这会有点笨手笨脚

user> (pprint 
        (flatten 
         (map :content (first (tree-seq :content :content (:content data))))))

("Tamper Export"
 "2012-06-26T15:40:22.063"
 "2012-06-25T00:00:00"
 "{06643D9B-DCD3-459B-86A6-D21B20A03576}"
 "1")

你可能希望它不会变平,这只会使它打印得更漂亮

谢谢。我试试这个。我之前有一个解决方案,我将编辑原始帖子以反映使用该方案的情况。它给了我一部分数据。你在数据中看到了什么,让你想到了树序列?我通常使用拉链来解析xml,因为xml是一个映射树(至少在解析之后)。在这种情况下,我只需要简单地遍历一下树,这样拉链就显得有些过火了。总的来说,我倾向于把任何有两个以上筑巢层次的东西当作一棵树,我想这就是我最终发现的结果。我在序列的每个元素中都有我想要的,并使用zipmap。
(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))))
user> (pprint 
        (flatten 
         (map :content (first (tree-seq :content :content (:content data))))))

("Tamper Export"
 "2012-06-26T15:40:22.063"
 "2012-06-25T00:00:00"
 "{06643D9B-DCD3-459B-86A6-D21B20A03576}"
 "1")