clojure xml过滤/使用data.zip搜索始终返回空

时间:2012-08-24 20:53:23

标签: xml clojure

我是clojure的新手,需要解析一些XML。 Other SO questions向我指出data.zip(尽管大多数仍指向旧的clojure-contrib.zip)。我想要做的就是收集一组标签,相当于//Foo。但是,虽然我可以解析xml,但我的所有匹配都是空的。

出于想法,我决定将part of the test code from data.zip复制到一个独立的clj文件中。当然应该有效:

(ns test.xmltest
  (:require [clojure.xml :as xml]
            [clojure.zip :as zip]
            )
  (:use clojure.pprint)
  (:use clojure.data.zip.xml)

)

(defn parse-str [s]
    (zip/xml-zip (xml/parse (new org.xml.sax.InputSource
                            (new java.io.StringReader s)))))

(def atom1 (parse-str "<?xml version='1.0' encoding='UTF-8'?>
                      <feed xmlns='http://www.w3.org/2005/Atom'>
                        <id>tag:blogger.com,1999:blog-28403206</id>
                        <updated>2008-02-14T08:00:58.567-08:00</updated>
                        <title type='text'>n01senet</title>
                        <link rel='alternate' type='text/html' href='http://n01senet.blogspot.com/'/>
                        <entry>
                          <id>1</id>
                          <published>2008-02-13</published>
                          <title type='text'>clojure is the best lisp yet</title>
                          <author><name>Chouser</name></author>
                        </entry>
                        <entry>
                          <id>2</id>
                          <published>2008-02-07</published>
                          <title type='text'>experimenting with vnc</title>
                          <author><name>agriffis</name></author>
                        </entry>
                      </feed>
                      "))

(defn -main []
  (pprint atom1)
  (xml-> atom1 :title :text)
)

然而,虽然漂亮的打印输出看起来很好,但实际匹配结果总是(),无论我放置什么。但是,我没有看到与此代码和代码in the test file (line 42)的区别。但我必须遗漏一些东西。

我正在运行clojure 1.4,leiningen 2,不应该做任何花哨的事情。

1 个答案:

答案 0 :(得分:1)

刚刚意识到这个问题。非常愚蠢的错字,最后一行应该是text,而不是:text