问题
I am using Python xml.etree.ElementTree to output XML. I want to output it with entity references that will be substituted when the XML is parsed.
ordinarily '&' is escaped as &
because '&' is used to declare entity references. However, I really do want to write an entity reference. For example, I want to write an XML file containing the entity reference &manifestName;
:
>>> from xml.etree.ElementTree import Element, tostring
>>> manifest = Element('manifest')
>>> manifest.text = '&manifestName;'
>>> tostring(manifest)
Which returns an escaped ampersand:
'<manifest>&manifestName;</manifest>'
The desired XML would be:
'<manifest>&manifestName;</manifest>'
I have tried various escaping tricks, like &
, \&
, &&
, but they do not work. The ampersands they contain are always rendered as &
.
回答1:
I have decided to go with a relatively palatable hack. In the text, I use &&
to mean an escaped &
. ElementTree converts this to &&
. At the end, I simply do a string replacement on it:
>>> from xml.etree.ElementTree import Element, tostring
>>> manifest = Element('manifest')
>>> manifest.text = '&&manifestName;'
>>> tostring(manifest).replace('&&', '&')
The result is the entity reference I want:
'<manifest>&manifestName;</manifest>'
来源:https://stackoverflow.com/questions/7986272/how-to-output-xml-entity-references