Как вывести ссылки на сущности XML - PullRequest
3 голосов
/ 02 ноября 2011

Я использую Python xml.etree.ElementTree для вывода XML. Я хочу вывести его со ссылками на сущности, которые будут заменены при разборе XML.

обычно '&' экранируется как &, потому что '&' используется для объявления ссылок на сущность. Тем не менее, я действительно хочу написать ссылку на сущность. Например, я хочу написать файл XML, содержащий ссылку на сущность &manifestName;:

>>> from xml.etree.ElementTree import Element, tostring
>>> manifest = Element('manifest')
>>> manifest.text = '&manifestName;'
>>> tostring(manifest)

Возвращает экранированный амперсанд:

'<manifest>&amp;manifestName;</manifest>'

Желаемый XML будет:

'<manifest>&manifestName;</manifest>'

Я пробовал разные уловки, например &#38;, \&, &&, но они не работают. Содержащиеся в них амперсанды всегда отображаются как &amp;.

1 Ответ

1 голос
/ 03 ноября 2011

Я решил пойти с относительно приятным взломом.В тексте я использую && для обозначения экранированного &.ElementTree преобразует это в &amp;&amp;.В конце я просто заменяю строку:

>>> from xml.etree.ElementTree import Element, tostring
>>> manifest = Element('manifest')
>>> manifest.text = '&&manifestName;'
>>> tostring(manifest).replace('&amp;&amp;', '&')

В результате получается ссылка на сущность, которую я хочу:

'<manifest>&manifestName;</manifest>'
...