使用 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 无效。
我需要一种在从文件解析 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 无效。