问题
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