gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:50:20 25 4
gpt4 key购买 nike

以下往返产生无效的 xml,因为结果未正确转义,即属性值包含 ' 而不是 apos;。我做错了什么还是这是一个错误?

(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 表示结构与这两个库相同,但只有后者可以正确发出。

关于xml - 使用 clojure.xml/parse 和 clojure.xml/emit 在 Clojure 中往返 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com