Я быстро проверил источник, и 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=\"'""'\"/>")))
<?xml version="1.0" encoding="UTF-8"?><foo bar="'""'"/>
Если вы действительно хотите использовать clojure.xml
, вам придется передать clojure.xml/emit
и использовать вместо этого производителя XML по вашему выбору.Ну, на самом деле, вы можете использовать clojure.xml/parse
, исказить результат, а затем передать его на clojure.contrib.lazy-xml/emit
;структура представления XML в Clojure одинакова для обеих библиотек, но только последняя выполняет правильное излучение.