加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用clojure.xml / parse和clojure.xml / emit在Clojure中往返于

发布时间:2020-12-16 23:49:17 所属栏目:百科 来源:网络整理
导读:下面的往返生成invaild xml,因为结果没有正确转义,即属性值包含’而不是’.我做错了什么或这是一个错误吗? (ns xml-test (:require [clojure.xml :as xml]) (:require [clojure.zip :as zip]))(def test-xml "?xml version="1.0" encoding="UTF-8"? main it
下面的往返生成invaild xml,因为结果没有正确转义,即属性值包含’而不是’.我做错了什么或这是一个错误吗?
(ns xml-test
  (:require [clojure.xml :as xml])
  (:require [clojure.zip :as zip]))

(def test-xml "<?xml version="1.0" encoding="UTF-8"?> <main> <item attr='&apos;test&apos;'> </item> </main>")

(def s (ByteArrayInputStream. (.getBytes test-xml "UTF-8")))

(xml/emit (zip/root (zip/xml-zip (clojure.xml/parse s))))

output:

<?xml version='1.0' encoding='UTF-8'?>
<main>
<item attr=''test''/>
</main>
nil
我已经快速检查了源代码并且clojure.xml / emit-element(由clojure.xml / emit调用)不会将任何字符编码为XML实体.实际上,它允许直接通过属性值.我想这意味着clojure.xml的可用性非常有限;你应该使用clojure.contrib.lazy-xml.我很抱歉在你关于XML发射的第一个问题的答案中没有提到它,我没有意识到这样的事情会发生.

使用clojure.contrib.lazy-xml,您可以执行以下操作:

user> (lazy-xml/emit
       (lazy-xml/parse-trim
        (java.io.StringReader. "<foo bar="&apos;&quot;&quot;&apos;"/>")))
<?xml version="1.0" encoding="UTF-8"?><foo bar="'&quot;&quot;'"/>

如果你真的想使用clojure.xml,你必须传递clojure.xml / emit并使用你选择的XML生成器.好吧,实际上,你可以使用clojure.xml / parse,修改结果,然后将它传递给clojure.contrib.lazy-xml / emit; XML的Clojure表示结构与两个库相同,但只有后者才能正确发射.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读