我很困惑如何习惯性地更改通过clojure.contrib的zip-filter.xml访问的xml树.应该尝试这样做,还是有更好的方法?
假设我有一些虚拟xml文件"itemdb.xml",如下所示:
<itemlist>
<item id="1">
<name>John</name>
<desc>Works near here.</desc>
</item>
<item id="2">
<name>Sally</name>
<desc>Owner of pet store.</desc>
</item>
</itemlist>
Run Code Online (Sandbox Code Playgroud)
我有一些代码:
(require '[clojure.zip :as zip]
'[clojure.contrib.duck-streams :as ds]
'[clojure.contrib.lazy-xml :as lxml]
'[clojure.contrib.zip-filter.xml :as zf])
(def db (ref (zip/xml-zip (lxml/parse-trim (java.io.File. "itemdb.xml")))))
;; Test that we can traverse and parse.
(doall (map #(print (format "%10s: %s\n"
(apply str (zf/xml-> % :name zf/text))
(apply str (zf/xml-> % :desc zf/text))))
(zf/xml-> @db :item)))
;; I assume something like this is needed to make the …Run Code Online (Sandbox Code Playgroud) 我试图从具有基于表格的布局的页面中抓取一些数据.因此,为了获得一些数据,我需要在第一个表内第五个表内的第二个表内获得第三个表.我试图使用enlive,但无法弄清楚如何使用nth-of-type和其他选择器步骤.更糟糕的是,有问题的页面在正文中有一个顶级表,但是(select data [:body:>:table])由于某种原因返回6个结果.我到底做错了什么?