【问题标题】:Does clojure-xml/parse return a lazy sequence?clojure-xml/parse 是否返回惰性序列?
【发布时间】:2012-06-26 17:48:10
【问题描述】:

clojure-xml/parse 返回一个 xml 文件的映射。

(ns xml-lib.core
  ^{:author "Charles M. Norton",
    :doc "xml-lib is an xml parsing library built on clojure-xml.
        Created on June 26, 2012"} 
  (:require [clojure.string :as cstr])
  (:require [util.core :as utl])
  (:require [clojure.xml :as cjxml]))

(defn ret-xml-data
    "Returns a map of the supplied xml file."
    [xml-fnam]

    (let [test-file-nam (utl/open xml-fnam)]
    (cjxml/parse xml-fnam))

返回的映射是惰性的,还是应该将解析调用传递给惰性序列函数?

谢谢。

(ret-xml-data "test.xml")

返回(结果被截断)。

{:tag :TamperExport, :attrs {:xmlns "http://

【问题讨论】:

  • 如果你想用 Clojure 懒惰地解析 XML,我推荐clojure.data.xml,它是 clojure-contrib 的 clojure-xml 的继承者。

标签: clojure lazy-evaluation


【解决方案1】:

简短的回答是不,clojure-xml 可能不会做你想做的事。

data.xml 是 clojure-xml 的惰性继承者

https://github.com/clojure/data.xml

【讨论】:

  • 谢谢。我明天去看看。
  • 这很有用,但它是一个评论,而不是对问题的回答(顺便说一句,这是“否”)。它可以改写为一个答案(轻推,轻推)。
【解决方案2】:

它在底层使用了一个 SAX Parser,它将消耗整个 xml 文档,所以我假设它会创建完全实现的数据结构。

【讨论】:

  • 这意味着我应该让它变得懒惰?我假设是因为您使用了“完全实现”这个短语。谢谢。
  • 我的意思是它是一个完整的数据结构,所以它已经存在了——在内存中;全部。
  • SAX 解析器并不一定意味着它创建了一个完全实现的数据结构,尽管在这种情况下这是正确的。旧的 contrib.lazy-xml 在将元素放入队列的新线程中启动解析器,并返回将元素从队列中拉出的 seq。
猜你喜欢
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2011-06-26
  • 2010-12-08
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
相关资源
最近更新 更多