Vector clojure:从xml创建地图向量
我有一个问题,就是如何在clojure中对xml文件执行select*样式的查询。 比如说,我有一个XML,如果我把它粘贴到这里,你可以从这个URL得到它,看起来不太好 我想为XML中的所有重复行获取一个带有标记的映射向量及其值。因此,在这个示例XML中,每个映射都是一个事件。我可以解析它,并为它创建一个拉链结构。我也知道如何使用结构映射来实现这一点,但我想要一个更通用的解决方案,用于任何给定的xml,可能还有一些起始标记。我想要的与此相反。任何想法都很好 谢谢 你应该看看。它将XML转换为不同的基于列表/地图的结构,并允许对其进行查询 例如,要选择所有事件,您必须执行以下操作:Vector clojure:从xml创建地图向量,vector,clojure,xml-parsing,maps,Vector,Clojure,Xml Parsing,Maps,我有一个问题,就是如何在clojure中对xml文件执行select*样式的查询。 比如说,我有一个XML,如果我把它粘贴到这里,你可以从这个URL得到它,看起来不太好 我想为XML中的所有重复行获取一个带有标记的映射向量及其值。因此,在这个示例XML中,每个映射都是一个事件。我可以解析它,并为它创建一个拉链结构。我也知道如何使用结构映射来实现这一点,但我想要一个更通用的解决方案,用于任何给定的xml,可能还有一些起始标记。我想要的与此相反。任何想法都很好 谢谢 你应该看看。它将XML转换为不同
(require '[net.cgrand.enlive-html :as html])
(def data (html/xml-resource "your.xml"))
(html/select data [:events])
要获取所有活动标题,请执行以下操作:
(select data [:even :title :*])
我已经好几个月没用了,所以我有点生锈了。但是网上有很多资料
编辑:
实际上,您可以使用Zipper来导航由xml资源创建的数据结构。下面是一个示例,我在其中查找任何与word bank相关的链接,然后从中找到它的父节点
(require [net.cgrand.enlive-html :as html])
(require [net.cgrand.xml :as xml])
(require [clojure.zip :as z])
(map
(comp z/node z/up)
(@#'html/zip-select-nodes*
(map xml/xml-zip (html/html-resource page2))
(@#'html/automaton
[:a (html/re-pred #".*[Bb]ank.*")])))
我必须使用@作为函数,zip选择节点*和自动机是名称空间专用的。我知道有一个用于xpath的clojure库,但我认为我可以使用Zipper来实现它……但运气不好……其作者将其描述为:Zipper很酷,实际上可以与Enlive一起使用,但它有点隐藏。我会在我的答案中添加关于它的信息!我的想法更像这样:->>en html/select xml doc[:holiday]map en html/text partition 2 map zipmap[:name:month]%。它与xml国际左撇子日8月13日罗孚的生日10月12日配合得很好。。。但不是我的。我无法从订阅源中选择任何内容。