使用 Clojure 解析 XML 时如何保留注释?

How to preserve comments when parsing XML with Clojure?

我需要一种在从文件解析 xml 时 保留注释 的方法。

我试过 clojure.xml/parse 以及来自 github 的其他几个非常好的库;它们都工作正常,只是每个人都在解析过程中去掉了注释。

任何人都可以推荐我不知道的 clojure.xml 的库或技术吗?

我最终对 xml 字符串做了一些准备工作。看起来有点老套,但暂时可以。

(defn preparse-comments
  [s]
  (-> s
    (s/replace #"<!--" "<comment>")
    (s/replace #"-->" "</comment>")))

(defn revert-comments 
  [s]
  (-> s
    (s/replace #"<comment>" "<!--")
    (s/replace #"</comment>" "-->")))

(defn load-data
  [xml-filename]
  (-> xml-filename
    (slurp)
    (preparse-comments)
    (clojure.data.xml/parse-str)))

(defn emit-and-prep
  [data]
  (-> data
    (clojure.data.xml/emit-str)
    (revert-comments)))

编辑:以上是一个非常简单的方法;如果您的评论中有标记括号工件(例如,/> 等),您必须以某种方式适当地考虑它们,以便预解析不会使您的 xml 无效。