5

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>&amp;manifestName;</manifest>'

The desired XML would be:

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

I have tried various escaping tricks, like &#38;, \&, &&, but they do not work. The ampersands they contain are always rendered as &amp;.

1

1 Answer 1

1

I have decided to go with a relatively palatable hack. In the text, I use && to mean an escaped &. ElementTree converts this to &amp;&amp;. 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('&amp;&amp;', '&')

The result is the entity reference I want:

'<manifest>&manifestName;</manifest>'
Sign up to request clarification or add additional context in comments.

1 Comment

I am having trouble implementing your solution. Could you check this question? stackoverflow.com/questions/56892938/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.