Видоизменение XML в Clojure

Clojures clojure.xml/parse, clojure.zip/xml-zip и clojure.contrib.zip-filter.xml/xml-> являются превосходными инструментами для того, чтобы вытащить значения из xml, но что, если я хочу изменить xml (результат clojure.zip/xml-zip) на основе того, что я узнаю из xml-> "запросы" и записываю результат обратно как xml?

Я ожидал бы что (clojure.contrib.prxml/prxml (clojure.xml/parse содержание XML)) слюна назад xml, но дело не в этом.

10
задан mac 15 March 2010 в 22:14
поделиться

2 ответа

Обновление: На самом деле, для отправки XML лучше всего использовать clojure.contrib.lazy-xml / emit , потому что clojure.xml / emit в настоящее время может ломать вещи! См. Мой комментарий ниже.

(Оставляем этот ответ здесь пока в качестве предупреждения.)


Если я правильно понимаю, основная направленность вопроса связана с преобразованием (возможно, измененного) представления XML обратно в текст XML?

Если Итак, взгляните на clojure.xml / emit и clojure.xml / emit-element :

user> (with-out-str (xml/emit {:tag :foo :attrs {:bar "quux"}}))
"<?xml version='1.0' encoding='UTF-8'?>\n<foo bar='quux'/>\n"

( with-out-str захватывает вывод на печать и превращает его в строку; по какой-то причине xml / emit печатает xml, поэтому здесь он пригодится. Вы захотите использовать emit-element if - это не то, что вам нужно.)

5
ответ дан 4 December 2019 в 00:23
поделиться

Вы можете использовать библиотеку xml-zip для «мутации» XML, как и вы бы сделали любую другую неизменяемую структуру Clojure. Он имеет полный набор «изменяющих» функций: (api)

Все они возвращают целую «модифицированную» застежку-молнию. Затем вы можете перейти к верхней части этой застежки-молнии и пользователю xml / emit распечатать XML.

7
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: