2015-05-06 49 views
0

我需要一种方式来保留评论从文件解析xml时。如何在使用Clojure解析XML时保留注释?

我试过clojure.xml/parse以及其他来自github的其他非常好的库;他们都工作得很好,只是每个人在解析过程中都会去掉评论。

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

+2

你检查了这个:https://github.com/clojure/data.xml – m0skit0

+0

哦,好的!看起来有希望 – lispHK01

+0

所以在data.xml中,它看起来很简单,可以特别发出注释,但我不确定是否有办法在往返场景中保留它们(例如,在xml中使用slurp,修改特定元素,然后重新 - 发送到filesys) – lispHK01

回答

0

我结束了对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无效。

+0

如果您对结果满意,您可以将您的问题标记为已回答。 –

+0

呃,当然不是 – lispHK01